【发布时间】:2012-08-27 18:50:20
【问题描述】:
我正在使用 EF --> Repositories/UnitOfWork --> Services --> MVC 3 分层方法,我只是想知道使用单独的程序集或组合程序集中的一些逻辑层有什么好处/缺点.
基本上我要问的是,如果您针对合同(接口)而不是实现进行编程,您可以在单个程序集中进行正确的操作吗?
【问题讨论】:
我正在使用 EF --> Repositories/UnitOfWork --> Services --> MVC 3 分层方法,我只是想知道使用单独的程序集或组合程序集中的一些逻辑层有什么好处/缺点.
基本上我要问的是,如果您针对合同(接口)而不是实现进行编程,您可以在单个程序集中进行正确的操作吗?
【问题讨论】:
使用程序集,您可以仅使用内置工具强制分层。
您可以使用命名空间实现相同的效果。您只需要一个能够验证命名空间依赖关系的工具,例如 NDepend。
接口与此讨论无关。它们提供编译时分离。运行时依赖项仍然存在。只是静态不可见。
从构建性能的角度来看,较少的程序集通常更可取。它们有时也会妨碍(“检测到循环引用!”)。
【讨论】:
单独组件的另一个优点是更容易重用和交换组件。例如,如果您想为同一个应用程序创建一个 WPF 前端,您可以使用与 MVC3 项目相同的层,只需将 Web 项目换成 WPF 应用程序。将应用程序的明显不同区域分开是很有意义的,以便以后能够更轻松地更改它们。
【讨论】:
使用多个程序集意味着您可以通过内部化某些接口和类来强制执行“隐藏”和“公共”接口,以便它们只能由同一程序集中的类使用 - 这意味着您可以使用辅助类和扩展类给定层,并且您不会只是说“草皮”并在不应该的地方使用它们。
这是一种强制执行分层性质的方法,而仅使用命名空间等是无法做到的。
【讨论】: