.net Web服务最佳实践…… SRP?

什么被认为是.asmx或wcf服务类关于有多少文件,代码行,职责等的适当开发? 大多数人为每个class级的不同crud方法发布单独的.asmx服务文件吗?

首先,新开发的最佳实践是使用WCF。 请参阅Microsoft:ASMX Web服务是一种“遗留技术” 。

其次,在SOA中,人们试图通过粗粒度操作来创建服务。 例如,您需要OrderProduct操作,而不是StartOrder,AddLineItem,AddOption,FinishOrder操作。 OrderProduct操作可能接受OrderDTO,如下所示:

public class OrderDTO { public CustomerInfo Customer {get;set;} public DateTime OrderTime {get;set} public DateTime ShipTime {get;set;} public List LineItems {get; private set;} } public class LineItemDTO { public int LineItemNumber {get;set;} public string ProductName {get;set;} public int Quantity {get;set} public Decimal Amount {get;set} public Decimal ExtendedAmount {get;set;} } 

而不是只创建一个空订单的StartOrder方法,然后是AddLineItem调用来添加单个行项目(就像你可能从桌面应用程序那样做),我推荐一个OrderProduct方法接受一个OrderDTO,它将有一个集合LineItemDTO。 您将一次性发送整个订单,在交易中添加所有部分,然后完成。

最后,我要说你还应该分成业务和数据层。 服务层应该只关注事物的服务方面,并且会调用业务逻辑层以完成工作。

一般来说,服务应该封装一组常用操作。 无论您使用的是ASMX还是WCF,都不应为每个操作创建一个“服务”。 面向服务的体系结构(SOA)背后的一般思想是模拟现实世界的业务行为。 为了给你一个愚蠢,但希望有效的例子……想想餐馆里的女服务员。 女服务员以订单,服务这些订单,提供饮料补充,提供调味品,最后处理付款的forms向客户提供服务。 女服务员提供的服务不是单一操作,而是相关操作的聚合。

但是,它并不止于此。 SOA的真正本质是任何给定的服务都可能依赖于其他服务。 女服务员不依靠厨师的服务,提供膳食,服务柜台的人,她可以获得调味品和饮料的情况,以及餐厅大楼本身提供的服务,都无法完成工作。 服务员提供的服务类型与厨师提供的服务之间也存在一些根本区别。 将其归结为技术编​​程术语…… Waitress是一项任务服务,但Cook是一种实体(或CRUD)服务。 女服务员处理更高级别的操作,为客户提供有用的function,而厨师处理较低级别的操作,仅向餐厅的其他员工提供细粒度和复杂的function。

我不能真正给你一个问题的具体答案,除了说你只是组织你的服务,但他们逻辑上合适。 对每个服务进行一次操作可能不是一个好习惯……然而,服务只进行一次操作并非闻所未闻。 任务服务通常只有一个操作。 实体服务通常有许多操作,通常是基于CRUD的,但有时还有其他服务。 还有公用事业服务提供最低级别的基础设施运营(回到餐厅,公用事业服务就像炉子,烤架,登记册等)。如果您在实际业务概念之后对服务进行建模,那么他们公开的操作和他们的对彼此的依赖最终应该变得清晰。

有关SOA的一些重要信息,请查看Thomas Erl(Prentice Hall)的SOA系列,因为它们是实现面向服务的企业的权威资源。

随时随地抓取这本书:

面向服务的体系结构(SOA):概念,技术和设计

回答您的每个问题以及您在实施过程中遇到的更多问题。