oop - DTO与领域对象、WCF以及DB层交互

标签 oop architecture

我有 asp.net mvc 2 应用程序。我对创建 DTO 和域实体感到困惑。

MVC Controller 集成要点: 1)第三方WCF 2) 数据库层

WCF 正在返回特定公司的 Persons 信息和有关公司的一些信息。

我已经生成了 WCF 代理并在代理上编写了一个服务包装器。 服务包装器正在与 WCF 对话并将结果映射到 DTO 类 ContactsDTO 服务层在不同的项目中。

以下是我的领域类

Company
Person

DTO class
//it contains
class ContactsDTO
{
Person person, Company[] company
}

Controller action 使用 companyID 调用包装器并获取 DTO 类的对象。 并从 dto 更新公司信息。它更新 Session 中的公司信息,并将 Company[] 数组传递给其他一些操作。

数据库交互:

现在,根据某些业务逻辑,我必须在数据库中插入人员 ID 和公司 ID 以及其他一些信息。

为此我创建了另一个

class DBDTO
{
Person person, Company[] company, OtherInfo otherInfo[]

}

此 DBDTO 已准备好并传递给数据库层(使用 Linq to sql)。

Questions

是写的方式来做。 DTO交互有什么改进吗?什么都 我可以做的改变来改善整体架构

最佳答案

将数据库绑定(bind)对象转换为 DTO(这需要时间)的另一种替代方法是使用 POCO(普通旧 CLR 对象)并将它们直接用作域模型、可以存储在数据库中的对象和传达给 Controller 进行可视化。 这可以让你开始:Working with POCO Entities

这种方法有几个优点

  • 您的 POCO 实体独立于底层数据库实现
  • 您的 POCO 实体可以在没有数据库的情况下进行单元测试
  • 您可以使用 DataContractSerializerDataContractJsonSerializer 轻松地将它们序列化为服务响应(如果您正在构建 API)

关于oop - DTO与领域对象、WCF以及DB层交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438104/

相关文章:

oop - 与 OOP 中的 'Ancestor' 相反

architecture - 架构模式和架构风格有什么区别?

android - 如何在交易过程中保持手机和服务器同步?

ruby-on-rails - Rails 环境中的 CQRS?

.net - 最佳实践 : 3-Tier Architecture in LINQ

Android MVVM Livedata 最佳实践

c++ - 如何在可能是任何类的属性的 void 函数上创建 typedef?

c# - 使用 DTO 保持 DRY

php - 带有关键字 Interface , extends , implements 的面向对象的 PHP

inheritance - 平等和哈希码提供者的组合与继承