有一个常规的 ASP.NET Core MVC 应用程序,其中添加了 Identity,通过服务(存储库模式)、一个 EmailSender 实现和几个控制器处理数据库实体,这些控制器简单地从数据库和注册页面路由到多个模型的视图(身份)。我是否正确理解整个服务器部分(使用数据库,包括邮件和注册)应该放在同一解决方案中的一个单独的新项目中,并且不包含视图,而只包含 API?两个独立的项目应该如何相互沟通?请求是否只是通过 fetch 从客户端发送到已发布 API 中方法的 url?也就是说,例如,我访问 somesite.com/phones,进入一个页面,该页面应该包含使用 fetch('somesite2api.com/getPhones' 获取的数据库中的数据 )? 如果这一切已经在某处描述过,请至少给出正确的名称以便谷歌搜索,因为我什至无法正常表述。我刚刚用HttpClient找到了一些东西,但我不明白是不是它?
我推荐阅读 Martin Fowler 的《清洁架构》一书,很多问题都会自己回答(奖励 - 思考新的好问题)。
在您提出问题的形式中,答案是微不足道的:他们确实如此,因此没有“最佳”选项,您需要专注于任务,并且作为专业人士,您应该能够两种选择,并能够理解在哪里以及在什么条件下一种更好或另一种选择。
我最近回答 ( 1 , 2 ) 如果您打算将项目的某些单独部分(最常见的是:合同)移交给另一个团队以包含在代码中,则可能需要单独的项目,因此如果您单独工作,相关项目是没想到 - 然后在一个项目中完成所有事情,这将减少您的开发时间。
Fowler 在部署单元方面考虑了拆分项目时要考虑的另一点。如果您有一个多层(N 层)架构,那么请问自己以下问题:您的 Web 服务器组件是否与数据库组件位于同一台服务器上?邮件工作?如果在不同的服务器上——那么当然你必须分成不同的组件,然后不同的项目将通过 http (HttpClient)、wcf、gRPC 等进行通信。当然(有一本关于这方面的书)这样的调用将比同一服务器内的调用花费更多,而这些调用又比来自相邻模块类的调用便宜。因此,从任务集开始,想想如何更容易解决你的问题。
有一次,我开始分成几个项目。由于额外的开销,这显着延长了开发时间,此外,我经常不得不考虑要连接的最小包集才能使其工作(并且它立即发生并且没有立即工作,哦,我第一次受了苦!)原则上,当我学会做时 - 如果没有真正需要,我开始更频繁地在一个项目中雕刻所有东西,但起初它帮助我更清楚地看到建筑边界,以在简单的项目上练习这项技能,以免考虑复杂的项目。哪种方法更接近您取决于您的目标。
我在 github 上为您提供了几个存储库示例,以便您不仅可以阅读答案,阅读书籍 - 还可以解析现成的解决方案。有来自编程界非常知名人士的优质项目,也有不太知名的项目:
并非所有人都坚持服务存储库方法,我手头的硬盘驱动器上的此类示例越来越少 - CQRS + Mediatr 上的示例越来越多,因此如果您需要,请随时查找您的示例。
您还需要了解 github 上有大量的项目,我建议您磨练搜索和阅读他人项目以寻找有趣的解决方案的技能。是的,一开始会很困难,但后来,如果你动手,你可以立即看到不是具体的解决方案,而是立即了解架构、优缺点。
因此,看项目,试着自己写,思考,训练!