DTO和域对象,WCF以及DB层交互

时间:2012-09-15 14:13:52

标签: oop architecture

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

MVC控制器集成点: 1)第三方WCF 2)DB Layer

WCF正在返回特定公司的人员信息以及有关公司的一些信息。

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

以下是我的域类

Company
Person

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

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

数据库互动:

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

为此我创造了另一个

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

}

准备好这个DBDTO并传递给DB Layer(使用Linq to sql)。

  
    

问题

  
     

是写作方式吗? DTO互动的任何改进?什么都有   我可以做的改进来改善整体架构

2 个答案:

答案 0 :(得分:0)

转换为DTO(需要时间)的DB绑定对象的另一种替代方法是使用POCO(普通旧CLR对象)并将它们直接用作域模型,可以存储在数据库中的对象和传达给控制器以进行可视化。 这可以帮助您入门:Working with POCO Entities

这种方法有几个优点

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

答案 1 :(得分:0)

我同意Algirdas因为责任不同而区分模型。

顺便说一下:MVC不是一个层概念。这是三个责任及其合作的概念。虽然它经常(错误地)用于分层,但如果您仅使用“MVC”分离应用程序层,则会遇到SRP问题。如果你每层都有MVC,那你就顺利了。

毕竟,如果它是一个小型应用程序,您可能永远不会达到临界质量以解决架构问题。