2010-10-17 86 views
4

从设计了模块化企业应用程序的每个人,我都有兴趣知道您如何看待模块化以及您的参数究竟是什么?用于Web应用程序的一般模块化设计

  1. 是基于层的模块化(如控制器/网络模块,服务模块,域模块)更好的方法?
  2. 还是基于特征的模块化更好?为什么?
  3. 如果基于特征的模块化,您如何防止/解决依赖于彼此服务的各种特征模块之间的循环依赖关系?

它更多的是一个基于经验的设计问题,因此涉及基于该经验的综合意见。

回答

3

由于基于图层的模块化带来的好处很少,因此您应该采用基于功能的方法。当然,这并不意味着你应该完全忽略(软件)层。

如果您将模块视为可部署组件(例如Maven构件,JARs within EAR),其主要动机之一是将应用程序分解为可为特定客户/部署打开和关闭的部分。在这种情况下,基于特征的模块化是显而易见的方法。

即使您确定不需要这种部署,我仍然会建议使用基于功能的模块化。特征模块之间的接口往往比层之间的接口小得多(因而更容易管理)。另外,在相邻两层工作的人通常都是相同的,所以强制模块分离是很困难的,而且往往会阻碍隔离带来的好处。

除非你正在考虑“大层”(UI,业务逻辑,数据库),在这种情况下它是可行的。对于这种情况,我建议使用“矩阵模块化”(即功能和层模块化),但建议使用基于特征的团队/个别责任,并为硬件部分提供一些专业角色。例如,一位GUI设计人员和几位程序员分别工作在不同的功能模块中,其中包括GUI。

至于问题3:尝试分解这两个模块甚至更多。他们通常太粗糙。如果他们不是经过一些思考/讨论后,你应该人为地分裂他们,以避免循环。如果那感觉不对,尤其是。如果你以非常小的模块结束,将它们合并成一个模块。只是不要尝试合并作为第一步。