使用 D7 的 3 层应用程序架构 [关闭]

Posted

技术标签:

【中文标题】使用 D7 的 3 层应用程序架构 [关闭]【英文标题】:Architecture for 3-tier application with D7 [closed] 【发布时间】:2011-10-12 12:08:26 【问题描述】:

到目前为止,我有使用 COM+ 技术构建 3 层应用程序的经验。 这是一项庞大而先进的技术,支持许多有趣的概念。 对于在 LAN 上运行的应用程序,它只是正常工作。

现在我正在计划构建 3 层系统,仍然基于 D7。不同之处在于它应该在互联网上工作。客户将分散在世界各地。 根据我在这种情况下的经验,我不会依赖 com+。 Com+基本上需要稳定的连接,防火墙服务器配置起来并不容易,要开放相当广泛的端口(即使你缩小了)。

所以问题是。哪种架构(Web 服务、服务或其他)在生产中适合您?我想我想要一个监听一个 tcp 端口的服务。我可以在其中保存可用于打开会话的会话客户端参数。此外,某种内置加密将是一个加分项。

感谢您的帮助!

【问题讨论】:

除 COM+ 或 DCOM 之外的任何东西。他们很烂。还有人记得BOLD吗?还好你也没有使用它。 :-) 【参考方案1】:

我们使用RemObjects SDK 提供服务,我们对质量非常满意! 您可以使用 TCP + 二进制消息(用于高速),可选择加密和压缩。但也可以使用 HTTP + SOAP(或 XML 或其他),或 TCP + SOAP 等。 非常好用,物有所值(不是很贵)!

顺便说一句:Data Abstract 是基于 SDK 的,两者都来自 RemObjects.com。

【讨论】:

【参考方案2】:

SOAP 或 REST Web 服务受到广泛支持,并且(几乎总是 SOAP,绝对总是 REST)基于 HTTP,因此对防火墙友好并且可以使用 SSL 进行加密。 Delphi 7 做了 SOAP,但做你自己的 REST 也没有那么难。

另一种选择是像Data Abstract 这样的第三方库,它可能对多层提供更好的开箱即用支持,但您可能会将自己更多地锁定在一项技术中。

话虽如此:我没有丰富的生产经验。

【讨论】:

【参考方案3】:

您可以查看我们的 ORM 框架,它通过多种协议(包括 HTTP/1.1)实现了 n 层客户端-服务器架构。

因此,它可以帮助您使用 ORM 方法和 n-Tier/SOA 架构在 Internet 上构建客户端-服务器应用程序。

可以使用 SOA(面向服务的架构)in an ORM Client-Server approach:

ORM 将用于数据层和业务逻辑层:您可以使用对象来映射您的数据库,并在必要时创建您自己的业务对象,这些对象将以 RESTful 方法在 Internet 上公开, via JSON; 数据过滤和验证是performed via ORM at Business Logic level; 用户界面将在客户端使用一些对象(有用于 Delphi UI 生成的专用单元,但您也可以编写 AJAX 应用程序,使用 JSON 进行通信); 您可以使用高级属性,例如 Dynamic Arrays in your objects - 所以它是 "Sharding" or "Share nothing" 就绪架构; 新的 HTTP 服务器 using fast http.sys kernel-mode server 和 zip / SynLZ 压缩 - 可以在 Internet 以外的地方使用(如果需要,可以使用 https); 安全的RESTful authentication via per-user light sessions 和每个查询的签名; 优化的 HTTP Delphi 客户端,using WinHTTP (faster than WinINet); 许多其他功能,包括(非常)不久的将来的any other DB back-end(本机 Oracle/OleDB/MSSQL...)。

查看文档,can be downloaded as pdf files。在 SAD 文档的第一部分中有一些页面突出了所有这些架构方面:

MVC 和多层架构; 为什么是 ORM(具有高级 RTTI) - 为什么它不仅仅是 DB 之上的一层; 为什么是客户端/服务器 ORM; 以 SOA 方法编写 RESTful 服务; ORM 和 SQL(通过 SQLite3 虚拟表、访问 BLOB 的自定义函数)。

它是开源的,从 Delphi 6 到 XE,全 Unicode(即使在 Delphi 7 上,因为它使用内部 UTF-8 编码,如 JSON)。因此,当您升级到较新的 Delphi 版本时,您的代码仍然有效。可能有用。

【讨论】:

使用非 Delphi 客户端和这个框架是否容易使用 JSON 访问 REST 资源? 由于 JSON 内容是标准的,并且由于实现了 REST 命令 (GET/POST/PUT/DELETE),因此您可以从处理这两种协议的其他客户端访问它。请参阅blog.synopse.info/post/2010/07/02/… 和框架文档(其中有一章专门介绍 RESTful/JSON 实现)。 +1。我一直在试验 Synopse 的东西(Arnaud 的作品),它的质量非常高,值得评估!我希望即使在 Delphi 7 中,我也可以使用 Unicode JSON(通过 Utf8 编码)为它投票两次。好主意。当我想到即使使用 16 位字符,Unicode 中仍然存在一些多字节代码的事实时,让我为宽字符 Unicode 感到遗憾……那么为什么还要为 UTF16 烦恼呢!好吧,除了基本上所有的 Windows API 都是基于 16 位 WideChar 的,而狭窄的 API 只支持 win-MBCS 代码页......这太糟糕了...... :-) @Arnaud 嘿 Arnaud,我刚刚花了 3 个小时阅读文档并浏览了包含的示例项目 :) 老实说,我印象深刻的是,有些人花时间编写免费的开源项目,例如你。但回到主题。不幸的是,我可能不会使用它。我已经开始寻找某种通过 TCP/IP 和加密的传输层,而不是 ORM。 JSON 可能会满足我的需求,但这是我想要实现的目标:我是 SP(storedProc) 和 MSSQL 人。 我相信SP中的代码,我最近坚持使用MSSQL服务器。 (我只需要执行 SP 来插入/更新和从中获取数据)我可能必须编写(重写)TSQLRestServer 后代类之一才能在 mssql 数据库上操作,此外它必须以线程安全的方式完成.大量代码要编写,大量测试要执行,代码对我身边的错误开放,并且不知道这些是否都能解决

以上是关于使用 D7 的 3 层应用程序架构 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )

Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )

微服务与多层架构 [关闭]

在 3 层架构中使用 DTO [关闭]

是否值得为小型(ish)应用程序使用 3 层架构

使用具有 3 层架构的 MVC 模式