Asp.net mvc Orchard,基于插件的体系结构,设计模式

Asp.net mvc Orchard,基于插件的体系结构,设计模式,asp.net-mvc,design-patterns,orchardcms,Asp.net Mvc,Design Patterns,Orchardcms,我正在研究软件架构、分层,并查看了许多开源.net项目,如Orchard CMS。 我认为Orchard是一些设计模式的好例子。 正如我所知,由于误用,UI、服务、存储库和实体应该位于单独的程序集中。但在Orchard(由于模块化和可插拔),我看到服务、存储库和实体类以及接口位于同一文件夹和同一命名空间中。 这不是一种反模式吗,或者对模式来说是正确的吗;DR:组件不一定是正确的分离设备 不,重要的是它们是分开的,而不是在单独的组件中。此外,在大多数应用程序中考虑因素的方式必须与在可扩展CMS中的

我正在研究软件架构、分层,并查看了许多开源.net项目,如Orchard CMS。
我认为Orchard是一些设计模式的好例子。
正如我所知,由于误用,UI、服务、存储库和实体应该位于单独的程序集中。但在Orchard(由于模块化和可插拔),我看到服务、存储库和实体类以及接口位于同一文件夹和同一命名空间中。

这不是一种反模式吗,或者对模式来说是正确的吗;DR:组件不一定是正确的分离设备

不,重要的是它们是分开的,而不是在单独的组件中。此外,在大多数应用程序中考虑因素的方式必须与在可扩展CMS中的方式不同。在可扩展的CMS中,正确的分离是分离成可以随意添加和删除的解耦特性,而常规分层应用程序需要分离层,以便能够以最小的风险和影响进行操作和重构。正确的比较实际上是在这些应用程序和Orchard中的模块或功能之间进行的,而不是将Orchard作为一个整体进行比较。当然,良好的实践应该在模块中使用,而且通常是这样

现在,分离成程序集是一个单独的问题,这比体系结构更具技术性。您可以将程序集视为自包含代码的容器,其创建目的是为了代码重用和动态链接,但并非特别是作为分离层的方式。这就是为什么它们在Orchard中与代码重用单元(模块)一致

也考虑这方面的实际情况:良好的建筑实践有一个主要目标,那就是使应用程序更容易和更便宜地维护(而不是,令人惊讶的是(不!)通过使他们能够建立只有他们能理解的宇航员架构来丰富顾问)。第二个目标是编写使应用程序具有可伸缩性和良好性能的代码(尽管这是一个更棘手的目标,因为它很容易导致过早优化,这是大多数软件罪恶的根源)

对于第一个目标,概念上的分离是最重要的,但是这种分离的方式通常不是很重要

不幸的是,第二个目标与将程序集用作分离设备的想法相冲突:Orchard在您开始添加可选模块之前已经有几十个程序集。组装也不是免费的。它们需要动态编译、加载、jitted、附带内存开销等。换句话说,为了获得良好的性能,通常需要减少程序集的数量


如果您想像现在一样将一个Orchard站点拆分为模块的程序集,然后将每个模块拆分为分层程序集,则必须将模块数乘以层数。这将需要加载数百个程序集。不好的。事实上,我们甚至正在考虑一种动态编译选项,将所有模块构建到一个组件中。

正如您所解释的,我也主要是想听听专家们在研究软件体系结构时对这个问题的看法。。。谢谢你的回答,这是一个很好的回答:一个最权威的说法是:“贝特朗不要再考虑了,只要把那个模块构建成一个单一的程序集。如果你证明有一个实际的问题,这是一个有效的解决方案,我们会做到的。