事实上,拆分 WCF 服务或任何服务是一种平衡行为。原则是您希望在仍然考虑性能的同时保持对复杂性的向下压力。
您创建的服务越多,您需要编写的配置就越多。此外,您将增加需要在客户端创建和维护的代理类的数量。
在一项服务上放置过多的 ServiceContract 会增加生成和使用代理所需的时间。但是,如果您最终只在合同上执行一两个操作,那么您将增加系统的复杂性而几乎没有什么收获。这不是一个科学的处方,但一个好的经验法则可以说是每个 ServiceContract 大约 10-20 个 OperationContract。
类耦合当然是一个考虑因素,但你真的在处理单独的问题吗?这取决于您的系统的功能,但大多数系统只处理少数几个问题,因此拆分可能实际上并不会减少类耦合。
要记住的另一件事,也是非常重要的一点是始终使您的方法尽可能通用。 WCF 处理 DataContracts 是有原因的。 DataContracts 意味着只要 DataContracts 已知,您就可以向服务器发送任何对象或从服务器发送任何对象。
因此,例如,您可能有 3 个 OperationContract:
[OperationContract]
Person GetPerson(string id);
[OperationContract]
Dog GetDog(string id);
[OperationContract]
Cat GetCat(string id);
但是,只要这些都是已知类型,您就可以将它们合并到一个操作中,例如:
[OperationContract]
IDatabaseRecord GetDatabaseRecord(string recordTypeName, string id);
最终,这是设计服务合同时要考虑的最重要的事情。如果您使用 DataContract 序列化之类的序列化方法,这适用于 REST。
最后,每隔几个月回顾一下您的 ServiceContract,并删除客户未使用的操作。这又是一件大事!