Tag: 服务层

将服务层与validation层分开

我目前有一个服务层,它基于ASP.NET站点中的“ 使用服务层validation”一文 。 根据这个答案,这是一个糟糕的方法,因为服务逻辑与违反单一责任原则的validation逻辑混合在一起。 我真的很喜欢提供的替代方案,但在重新分解我的代码时,我遇到了一个我无法解决的问题。 请考虑以下服务接口: interface IPurchaseOrderService { void CreatePurchaseOrder(string partNumber, string supplierName); } 基于链接的答案具有以下具体实现: public class PurchaseOrderService : IPurchaseOrderService { public void CreatePurchaseOrder(string partNumber, string supplierName) { var po = new PurchaseOrder { Part = PartsRepository.FirstOrDefault(p => p.Number == partNumber), Supplier = SupplierRepository.FirstOrDefault(p => p.Name == supplierName), // Other properties omitted for brevity… […]

存储库层是否应该返回数据传输对象(DTO)?

我有一个存储库层负责我的数据访问,由服务层调用。 服务层返回序列化并通过线路发送的DTO。 通常,服务只是访问存储库并返回存储库返回的内容。 但为了使其工作,存储库必须返回该DTO的实例。 否则,您首先必须将存储库返回的数据层对象映射到服务层中的DTO并返回该对象。 这看起来很浪费。 最重要的是,如果DTO的创建发生在服务层中,那么在一个存储库调用之前可能已经完成的事情以及因此一个数据库查询现在必须在服务层中的多个存储库调用中发生以“组合”最后的DTO。 当然,除非我在数据和服务层之间创建一个可以包含这样一个组合对象的传输对象。 然后必须将其映射到DTO。 为了纯洁,这似乎是浪费。 但是,让存储库层返回仅通过线路发送的对象也是错误的。