对于每个设计了模块化企业应用程序的人来说,我很想知道您如何看待模块化以及您的参数到底是什么?
- 基于层的模块化(如控制器/Web 模块、服务模块、域模块)是更好的方法吗?
- 还是基于特征的模块化更好?为什么?
- 在基于特征的模块化的情况下,您如何防止/解决依赖于彼此服务的各种特征模块之间的循环依赖关系?
它更多的是基于经验的设计问题,因此涉及基于该经验的各种意见。
对于每个设计了模块化企业应用程序的人来说,我很想知道您如何看待模块化以及您的参数到底是什么?
它更多的是基于经验的设计问题,因此涉及基于该经验的各种意见。
您应该基于功能,因为基于层的模块化带来的好处很少。当然,这并不意味着您应该完全忽略(软件)层。
如果您将模块视为可部署的组件(例如 Maven 工件、JARs-within-EAR),这样做的主要动机之一是将应用程序分解为可以为某些客户/部署打开和关闭的部分。在这种情况下,基于特征的模块化是显而易见的方法。
即使您确定不需要这种部署,我仍然建议使用基于功能的模块化。功能模块之间的接口往往比层之间的接口小得多(因此更容易管理)。此外,在两个相邻层上工作的人通常是相同的,因此执行模块分离很困难,而且通常只会妨碍隔离带来的任何好处。
除非您正在考虑“大层”(UI、业务逻辑、数据库),在这种情况下它是可行的。对于这种情况,我建议“矩阵模块化”(即功能和层模块化),但具有基于功能的团队/个人职责,以及一些针对困难部分的专家角色。例如,一个 GUI 设计人员和几个程序员各自工作独立的功能模块,包括 GUI。
至于问题3:尝试进一步分解这两个模块。它们通常太粗糙了。如果他们不是经过一些思考/讨论,你应该人为地分割它们以避免循环。如果感觉不对,尤其是。如果您以非常小的模块结束,请将它们合并到一个模块中。只是不要尝试将合并作为第一步。