1

我想对我目前的设计提供一些帮助。我有一个WCF服务,后面的WCF服务是一个服务层(http://martinfowler.com/eaaCatalog/serviceLayer.html)和存储库层。WCF /服务层/存储库层:从服务层返回DTO?并从DTO在控制器中创建ViewModel返回

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

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

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

我想知道我在做这个权利,即服务层和仓库后面的WCF服务?

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

另外我想知道它是否真的有必要从Repository模型转换成Repository从WCF服务返回给DTOs。

任何帮助非常感激

回答

5

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

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