WCF /服务层/存储库层:从服务层返回DTO?从DTO返回的Controller中创建ViewModel

Mar*_*tin 1 asp.net-mvc wcf controller repository-pattern service-layer

我想对我目前的设计提供一些帮助.我有一个WCF服务,WCF服务背后是一个服务层(http://martinfowler.com/eaaCatalog/serviceLayer.html)和存储库层.

因此,客户端调用WCF服务层,WCF服务层(充当服务层)调用存储库层.

存储库层返回表示数据库的MODELS(Poco).那么服务层我认为我需要将POCOS转换为DTO以通过线路传输?或者我应该把这些作为POCO?

一旦我在服务层上有我的给定对象,我就将其返回给客户端(ASP.NET MVC),其控制器负责将从WCF服务返回的对象映射到VIEWMODEL.

我想知道我这样做是正确的,即WCF服务后面的服务层和存储库层?

并且控制器负责从WCF服务返回的实际模型创建ViewModel.

此外,我想知道是否真的有必要转换从存储库将返回到WTO服务返回的DTO准备好的REAL模型.

任何帮助真的很感激

Dar*_*rov 6

就你的WCF服务而言,一切看起来都很好.您有模型,存储库层来访问数据,您将这些模型返回给客户端.你是否应该使用DTO是值得商榷的.如果您有POCO(不是一些ORM依赖对象),您应该没问题.虽然有些情况下可能需要DTO:例如,圆形对象图可以通过ORM进行管理,但不能通过线路进行序列化(以可互操作的方式).

现在到客户端部分:您使用WCF的事实应该是一个实现细节.因此,在ASP.NET MVC应用程序中,您将拥有一个存储库,该存储库使用您在编写svcutil.exe服务时导入的POCO ,然后使用此存储库的实现,该存储库将执行对服务的实际调用(可能使用ServiceClient自动生成的类).然后你的控制器应该使用抽象存储库并配置DI框架以注入实际的实现.当控制器操作调用某个存储库方法时,它会获得一个POCO,然后通过处理映射层(AutoMapper?)转换为传递给视图的特定视图模型.反过来说:控制器动作从视图中获取视图模型作为动作参数,使用映射层将其映射回POCO,POCO将传递给存储库,该存储库将负责使用此模型执行所需任务(在您的情况下以及将其传递给某个远程WCF服务的特定实现).