我有一个WCF层,我的域模型在这个WCF层后面.我使用Nhibernate作为ORM工具,我所有的业务逻辑/数据访问等都将在这个WCF层之后.
我向我的客户揭露了DTO.我有以下问题
1)我应该创建DTO吗?将实体直接暴露给wcf客户端有什么害处,因为我的实体也会有业务逻辑方法这样做我不得不用WCF属性来破坏我的权利对象,我觉得这样做不好?
2)如果我公开DTO,我应该验证DTO以及实体.如果我只验证DTO,那么我没有为我的Enitity对象提供任何输入验证.这个可以吗?
3)我应该考虑使用Schema验证在Application Service层(WCF层)中验证DTO吗?或应该使用在文章[博客]给出IValidator方法:http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/如图麦博加德
有时DTO对我来说似乎是多余的,但我可以使用它来从一个或多个实体中获取详细信息.
我将暴露该服务以各种客户端,因此我的DTO将从一些基地DTO具有凭证细节我将我的实际WCF方法调用(可能使用IEndpointBehaviour和IParamInspector)之前检查每个传入请求来导出
基于响应,我现在同意保留DTO层,这是一个例子,以便场景变得更加明确
假设我在我的WCF应用程序服务层中接受CustomerDetailsDTO的CreateCustomer方法可以由MVC应用程序调用.有一些输入验证,如
输入验证:
i)Name length should be greater than 2 but less than 50 ii) Age is mandatory and cann not be less than 18 (Different other field validations)etc
业务验证:
There could then be some business rules to check for dupliate customer
based on say email or some other factor whcih i think should be part of
my Domain business logic and should reside in CustomerEntity class.
输入验证应该仅应用于服务接口层,因为我们从客户端获取DTO,或者它也应该应用于CustomerEntity
我有一个现有的ASP.NET Web服务(asmx),我试图进入Azure.Web服务的日志记录组件将消息记录到MSMQ中,并且有一个Windows服务,它读取消息并更新数据库.
这可能是使用Azure Web APP(网站)吗?Web服务代码是否能够在运行时创建消息队列并将消息推入其中?