是否与您的客户端应用程序共享您的服务/API 程序集是相当主观的。如果您是一家完整的 Microsoft 商店,并且在整个应用程序堆栈中使用 .NET,那么我会说共享 API 是获得代码重用的好方法(您必须小心设计 API 以免流血域问题,例如存储库,到您的演示文稿中。)如果您没有任何计划将您的客户端应用程序迁移到其他平台(即您计划在可预见的未来继续使用 .NET),那么我认为分享它是完全可以接受的您的服务/API 程序集(即便如此,在多平台客户端环境中,与 .NET 客户端共享服务/API 仍然应该是可以接受的。)“架构理想”和“实用且可实现”之间总是存在权衡在预算之内'。您可以花费大量时间、金钱和精力来尝试实现架构上的理想,而实际上与实际之间的差距通常并没有那么大。选择不共享 API 并从本质上重新创建它以维护“正确”的 SOA,只使用合同,实际上会增加工作量并引入维护麻烦,这在特定时间对于您的特定项目很可能不值得。鉴于您通常已经是“面向服务的”,如果在未来某个时间点您需要客户端上的仅合同消费可以提供的好处,那么您已经准备好去那里了。但不要过早地推得太远。选择不共享 API 并从本质上重新创建它以维护“正确”的 SOA,只使用合同,实际上会增加工作量并引入维护麻烦,这在特定时间对于您的特定项目很可能不值得。鉴于您通常已经是“面向服务的”,如果在未来某个时间点您需要客户端上的仅合同消费可以提供的好处,那么您已经准备好去那里了。但不要过早地推得太远。选择不共享 API 并从本质上重新创建它以维护“正确”的 SOA,只使用合同,实际上会增加工作量并引入维护麻烦,这在特定时间对于您的特定项目很可能不值得。鉴于您通常已经是“面向服务的”,如果在未来某个时间点您需要客户端上的仅合同消费可以提供的好处,那么您已经准备好去那里了。但不要过早地推得太远。如果在未来的某个时间点,您需要客户端上的仅合同消费可以提供的好处,那么您已经准备好去那里了。但不要过早地推得太远。如果在未来的某个时间点,您需要客户端上的仅合同消费可以提供的好处,那么您已经准备好去那里了。但不要过早地推得太远。
鉴于您的需求,从到目前为止我从这些帖子中收集到的信息来看,我认为您的服务也走在了正确的轨道上。存储库(a la Evans,DDD)绝对是一个领域问题,因此,从表示层的角度来看,您真的不必担心它。您的服务是您的域的网关,它是您的业务逻辑的所在地。存储库只是一种支持工具,可以帮助您实现与数据存储的域隔离(它们确实是美化的集合,坦率地说......它们在动态和复杂的域中可能有点痛苦。简单的数据映射器, (Fowler,PofEAA)从长远来看通常更容易处理且不那么复杂,并且允许围绕数据检索逻辑的更具适应性的行为集中在域服务中。) 除了大量使用对 REST 服务的 AJAX 调用之外,如果您在域周围公开了足够的服务/API,那是您的客户唯一应该担心的事情。将所有其余的业务逻辑完全封装在您的域范围内,并使您的客户尽可能轻量级,并从“存储库”或“数据映射器”等概念中抽象出来。
以我的经验,唯一需要跨客户端到域边界共享的非服务或 API 概念是上下文……而众所周知,在面向服务的应用程序中跨越该边界可能非常困难。