asp.net-mvc – Orchard,基于插件的架构,设计模式
我正在研究软件架构,分层,并看了很多开源的.net项目,比如Orchard CMS.
我认为Orchard是一些设计模式的好例子. 据我所知,由于滥用,UI,服务,存储库和实体应该在单独的程序集中.但是在Orchard中,(由于模块化和可插拔)我在相同的文件夹和相同的命名空间中看到服务,存储库和实体类和接口. 它不是反模式,还是模式正确? 解决方法
TL; DR:组件不一定是正确的分离设备.
不,重要的是它们是分开的,而不是它们在单独的组件中.此外,您在大多数应用程序中考虑事物的方式必须与您在可扩展CMS中的方式不同.可扩展CMS中的正确分离是可以随意添加和删除的分离特征,而常规分层应用程序需要分层,以便可以以最小的风险和影响对其进行处理和重构.正确的比较实际上是其中一个应用程序与Orchard中的模块或功能之间,而不是整个Orchard.但是,当然,应该在模块中使用良好实践,它们通常是. 现在分离到组件是一个单独的问题,这比技术更具技术性.您可以将程序集视为自包含代码的容器,为代码重用和动态链接而创建,但不是特别作为分离层的方法.这就是为什么它们在Orchard中与代码重用单元(模块)重合的原因. 还要考虑这方面的实际方面:良好的架构实践有一个主要目标,即使应用程序更容易和更便宜维护(而不是,令人惊讶的是(不!)通过使他们能够设置仅仅是宇航员架构来使顾问变得富有他们可以理解).第二个目标是编写可扩展且性能良好的应用程序(尽管这是一个棘手的目标,因为它很容易导致过早优化,这是大多数软件恶意的根源). 对于第一个目标,概念分离是最重要的,但这种分离的方式通常不是很重要. 不幸的是,次要目标与使用程序集作为分离设备的想法相冲突:Orchard因为它甚至在您开始添加可选模块之前已经有许多程序集.装配不是免费的.它们需要动态编译,加载,jitted,带来内存开销等.换句话说,为了获得良好的性能,通常需要减少程序集的数量. 如果您想将Orchard站点分成现在的模块组件,然后将每个模块分成分层组件,则必须将模块数乘以层数.这将是数百个要加载的程序集.不好.事实上,我们甚至考虑使用动态编译选项将所有模块构建到单个程序集中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何对跨项目共享的资源进行版本控制
- asp.net – IIS(动态和静态)缓存,OutPutCache和浏览器缓存之
- Asp.net 代码设置兼容性视图
- asp.net-mvc – 与asp.net MVC中的ExceptionHandlerFilter冲
- asp.net – web.config中system.codedom中多个编译器定义的
- ASP.NET Core 1.0 F#项目
- asp.net-mvc – 在ASP.NET Identity 2.0中更改AspNetUsers表
- 如何在ASP.NET网页中嵌入代码块?
- ASP.NET(MVC)路由国际化
- asp.net – 基于基于角色的安全隐藏Html.ActionLinks
- asp.net – 解析美国邮政地址的免费API?
- 发布一款层次下拉列表控件
- asp.net-mvc-3 – 在ASP.NET MVC 3中应用数据注释
- asp.net-mvc – 用于大型视频文件的MVC ActionRe
- ASP.NET MVC:Action Filter设置控制器变量?
- asp.net-mvc-4 – 为一个页面使用两个Knockout视
- asp-classic – 你用什么来编辑和开发经典ASP
- asp.net – DropDownList的EditorTemplate
- 在我的ASP.NET MVC站点区域中执行全局视图数据的
- asp.net-mvc – 其中Simple Injector等效于Struc