Oop DTO和域对象、WCF以及DB层交互
我有asp.NETMVC2应用程序。我对创建DTO和域实体感到困惑 MVC控制器集成点: 1) 第三方WCF 2) 数据库层 WCF将返回特定公司的人员信息和公司的一些信息 我已经生成了WCF的代理,并在代理上编写了一个服务包装器。 服务包装器正在与WCF通信,并将结果映射到DTO clas ContactsDTO 服务层位于不同的项目中 以下是我的域类Oop DTO和域对象、WCF以及DB层交互,oop,architecture,Oop,Architecture,我有asp.NETMVC2应用程序。我对创建DTO和域实体感到困惑 MVC控制器集成点: 1) 第三方WCF 2) 数据库层 WCF将返回特定公司的人员信息和公司的一些信息 我已经生成了WCF的代理,并在代理上编写了一个服务包装器。 服务包装器正在与WCF通信,并将结果映射到DTO clas ContactsDTO 服务层位于不同的项目中 以下是我的域类 Company Person DTO class //it contains class ContactsDTO { Person pers
Company
Person
DTO class
//it contains
class ContactsDTO
{
Person person, Company[] company
}
控制器操作使用companyID调用包装器并获取DTO类的对象。
并从dto更新公司信息。它在会话中更新公司信息,并将公司[]数组传递给其他一些操作
数据库交互:
现在,根据一些业务逻辑,我必须在数据库中插入个人id和公司id以及一些其他信息
为此,我创造了另一个
class DBDTO
{
Person person, Company[] company, OtherInfo otherInfo[]
}
这个DBDTO被准备好并传递给DB层(它使用LINQtoSQL)
问题
这就是写作的方式。DTO交互有什么改进吗?怎么回事
我可以做些改变来改进整体架构
将DB绑定对象转换为DTO(这需要时间)的另一种替代方法是使用POCO(普通的旧CLR对象),并将它们直接用作域模型、可存储在DB中的对象以及与控制器通信以进行可视化的对象。 这可以让您开始: 这种方法有几个优点
- 您的POCO实体独立于底层DB实现
- 您的POCO实体可以在不存在数据库的情况下进行单元测试
- 您可以使用或轻松地将它们序列化为服务响应(如果您正在构建API)
毕竟,如果它是一个小型应用程序,您可能永远不会达到架构出现问题的临界质量。DTO,正如它在名称中所述,是数据传输对象。它应该只用于传输,不应该封装域对象,也不应该封装数据库对象。这就是说,您的DB层可能有一些特定的对象,例如DBObject,它们直接从DTO映射到DTO,而客户端的DTO直接从客户端对象映射到客户端对象,例如ClientEntity。有很多基础架构代码和映射,是的,但最终您将拥有干净、独立的客户端和DB层域对象代码。