ASP.NET 应用程序中 WCF、DAO 和 DTO 层之间的交互

Posted

技术标签:

【中文标题】ASP.NET 应用程序中 WCF、DAO 和 DTO 层之间的交互【英文标题】:Interaction between WCF, DAO and DTO layers in ASP.NET application 【发布时间】:2011-07-04 06:29:10 【问题描述】:

有人可以指导我了解 WCF、DAO 和 DTO 层如何相互通信吗?如果有人可以指定哪个层首先出现,然后它如何与下一层交互等等,我将不胜感激。

【问题讨论】:

【参考方案1】:

您似乎不知道这些术语是什么意思。首先,它们都不是“层”。

WCF - Windows 通信基础 - 用于构建面向服务的应用程序的 MS 技术 DAO - 数据访问对象 - 对象公开操作以与数据库交互(加载对象、保存对象等),但在内部隐藏有关数据库的详细信息。 DTO - 数据传输对象 - 用于将数据从一层/层传输到另一层/层的特殊类型的对象。

因此,这些术语在实际架构中的示例用法可以是:

数据层(数据库服务器)

运行数据库

业务层(应用服务器)

数据访问层使用 DAO 访问 DB 并向更高层隐藏 DB 详细信息。 业务层使用数据访问层来访问和持久化数据。运行所有领域逻辑、工作流、业务规则等。 在 WCF 中实现的服务层从业务层公开业务操作。服务层暴露了使用 DTO 传输数据的 Web 服务。域/业务对象与 DTO 相互转换。

表示层(Web 服务器)

表示层 - ASP.NET 应用程序使用服务层与业务层进行通信。服务层和表示层仅交换 DTO。

此架构仅适用于大型项目。通常不需要分离表示层和业务层,因此不需要 WCF 服务层。在这种情况下,您的表示层可以直接访问业务层,而无需使用 DTO。

编辑:

根据您的 cmets,我正在添加这些信息。

NHibernate 的 Session 可以称为 DAO,因为它提供了与 DB 交互的操作,但它也隐藏了 DB 的详细信息。 使用 NHibernate 时,您有一组类可以根据定义的映射持久化到 DB。 NHibernate 存储和加载这些对象。您可以向这些类添加一些逻辑(方法),并将它们称为域/业务对象。 DTO 是一种特殊类型的对象,它没有任何逻辑。它只是数据的箱子。它通常设计为仅传输操作实际需要的数据(例如,如果您只需要姓名和电子邮件,则不会传输整个客户对象)。 DTO 还应设计为从多个业务对象传输数据,以减少客户端和服务之间的往返。

【讨论】:

非常感谢您的回复。您能否简单解释一下业务/域对象、DTO 和 DAO 将如何交互,因为我们必须在设计中使用它们?这些对象中的哪一个实际上对应于数据库中的表,因此对这些对象的操作也会导致数据库表的更改?我们还将使用 NHibernate,那么它会在 DAO 中使用吗? 这是错误的架构方式。构建您的架构并在需要时使用模式。不要仅仅为了使用模式而构建架构——它总是会导致设计过于复杂。 我们遇到的问题是应用程序的一部分(其中的一个功能部分)由第三方供应商构建,现在客户要求我们构建第二个功能部分,其中包含早期的开发人员已经离开。但是我们没有得到应用程序先前构建部分的代码演练。但无论如何,我要真诚地感谢您为回答我的基本问题所付出的努力。

以上是关于ASP.NET 应用程序中 WCF、DAO 和 DTO 层之间的交互的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET 应用程序验证 WCF 服务

WCF 和 ASP.Net 预编译

ASP.NET 中的 WCF 模拟异常

带有 asp.net mvc 应用程序的 WCF 服务

ASP.NET MVC 和 WCF 服务安全 - 身份验证、路由

WCF => MVC 作为 ASP.NET WebServices => ASP.NET Web 应用