介绍
这也是我也问自己的事情。我总是有一个燃烧的问题与你的相似。
一个好的命名惯例是什么?
我应该如何命名?他们应该进入文件夹或项目吗?
搜索后,我怀疑答案是 真的没关系. 。重要的是,您的解决方案具有一些明智的建筑,并且您尝试遵循良好的做法,例如 坚硬的.
我的ASP.NET MVC英雄是 杰弗里·巴勒莫(Jeffrey Palermo), 史蒂夫·史密斯 和 吉米·博加德(Jimmy Bogard).
洋葱架构
杰弗里·巴勒莫(Jeffrey Palermo 洋葱架构 (推荐阅读)。杰弗里(Jeffrey)在何处放置东西的问题表现出了很好的方法。他解释说,在您的应用程序的中心(或顶部) 核. 。这层是您应该放置界面的地方 IRepository
和 IService
.
几乎所有的接口都应该进入核心,其他所有(其他项目)都可以参考核心。这样,一切都知道应用程序的骨骼结构而不知道实现细节。
尝试尽可能少地参考UI层参考。在我的一个应用程序中,我的UI(MVC)层仅引用核心。它需要的一切都注入 依赖注射.
史蒂夫·史密斯(Steve Smith)讨论了洋葱建筑和类似的想法 MVC解决方案最佳实践:解决方案问题的解决方案
我的解决方案
在我的MVC解决方案中,我有这样的典型结构:
- myproject.cor
- myproject.domain
- myproject.ipententimentive
- myproject.infrastructure
- myproject.web
- myproject.tests
这 核 包含我的界面。通常将其分为服务,型号,域,存储库等文件夹。
这 领域 图层引用仅核心并包含我的实现。它为核心中的域抽象提供了许多混凝土类。它涉及许多业务逻辑,处理,命令处理,经理课程,具体服务实施等。我认为这是一个相当内在的层,因此它尽可能少。
这 依赖性 图层包含我选择的DI软件包/框架和实现详细信息。我认为这是外层;类似于UI或基础架构,因此,如果它经常引用,则可以。这层没有必要成为一个单独的项目,许多人会告诉您不要这样做。没关系;做的事情适合您项目的复杂性。我喜欢我的di是它自己的事。它是如此分开的好处是,我可以用另一个框架替换DI框架,事情会很好。没有层参考DI项目。
这 基础设施 图层包含有关记录,电子邮件和数据访问的信息。它将包含我的 ORM 选择。这不是商业逻辑的东西,也不是UI的东西。完成工作是我解决方案的铁路。它在外层,但仅引用核心。
这 网络 图层是我的MVC项目,仅引用核心。
复杂性和最终想法
我在这里找到了类似问题的答案,但是它们往往涉及比我在这里概述的更复杂的架构
这是一个好点。重要的是要牢记问题的复杂性。但是不要被良好的解决方案做法所阻止。我的解决方案和洋葱架构不一定非常复杂,也不会真正膨胀您的解决方案。他们只是将事情分开。
在 进化项目结构, ,吉米·博加德(Jimmy Bogard)谈论事情过度复杂。如果我说的话看起来太复杂了,请遵循吉米的建议,并将其全部放在一个项目(您的UI层)中。没关系 - 只要适合您。
记住只将我的解决方案作为一个想法 - 要考虑的事情;我的方法是试图遵循最好的建议,但我敢肯定我只成功了。我仍然可以(而且必须)进步。