Architecture 软件项目的模块化有多重要

Architecture 软件项目的模块化有多重要,architecture,modularization,Architecture,Modularization,模块化在软件项目中显然很重要,但我想知道人们对模块化的重要性以及其重要性的原因的看法。自从我提出这个问题以来,我显然有自己的想法,但把它想象成一场“共同的头脑风暴”,讨论人们应该将自己的软件项目模块化的原因……我将代码放入不同模块的主要原因: 关注点分离:我觉得,如果将不同级别的类或不同任务的类组织成单独的模块,则更容易限制它们的内部知识。如果内部结构隐藏得很好,那么依赖内部结构会让人感觉更“脏” 更容易维护较小的组件:我通常发现,如果我在一个代码文件较少的项目上工作,那么开发环境的响应性会比

模块化在软件项目中显然很重要,但我想知道人们对模块化的重要性以及其重要性的原因的看法。自从我提出这个问题以来,我显然有自己的想法,但把它想象成一场“共同的头脑风暴”,讨论人们应该将自己的软件项目模块化的原因……

我将代码放入不同模块的主要原因:

  • 关注点分离:我觉得,如果将不同级别的类或不同任务的类组织成单独的模块,则更容易限制它们的内部知识。如果内部结构隐藏得很好,那么依赖内部结构会让人感觉更“脏”
  • 更容易维护较小的组件:我通常发现,如果我在一个代码文件较少的项目上工作,那么开发环境的响应性会比项目包含成百上千个文件时更高
  • 防止名称空间冲突:正确模块化后,例如在Java中使用名称空间,您可以为相同的功能使用相同的函数名,而不必担心Foo组件中的printout()函数将与Bar组件中的printout()函数冲突
  • 安全问题分离:当一个组件踩到另一个组件的脚尖时,可以更容易地将潜在的损坏降至最低。根据使用的技术,您可以限制每个模块在内存中的播放位置

我认为其中一个主要方面是重用。当您以模块化方式构建东西时,几乎没有类似的事情:“哦,我以前已经做过了,但是要使用它,我还必须获得这个和这个功能,这与我的应用程序完全无关”

而且,它更容易理解。我不能同时在脑海里记住很多事情。当代码是模块化的时,就更容易建立一个有意义的东西的“区域”。一旦这个区域变得很小,我就可以把它理解为一个整体而不是一部分


最后,当事情变得更小时,更容易测试和维护。此外,一旦测试只测试应用程序的一小部分,您的测试会更快地指出错误所在

我们人类在一次抓住复杂问题时是有限的。然而,我们有能力将一个复杂的问题分解成(可能是非常大的)数量不太复杂的单个问题,以便解决这个大问题

这从根本上推动了“重用”、“关注点分离”、“更易于维护”等答案


所有这些原因都是正确的,无论是一个人将复杂问题分解成一个个问题来解决,还是一个团队将复杂问题分解成一个个问题来解决。

模块化和解耦非常重要,原因有很多,其中一些是:

  • 重用:重用专用于特定用途的软件模块要容易得多
  • 管理复杂性:处理解耦模块(编写代码、调试、维护等)可以让您专注于某个领域的问题,而不会被应用程序或软件系统的其他方面分散注意力

它也可以被视为一项基本活动,其中:

  • 需要一些业务和功能规范
  • 并将主要功能分组到应用程序中,同时识别非功能模块和纯技术横向模块
这就是为什么“金融投资组合计算”实际上将分为:

  • 计算模块
  • dispatcher模块(因为投资组合太大,无法在一台服务器上计算)
  • 发射器模块(用于引导所有计算)
  • GUI(查看实际情况)
加上几个横向的:

  • KPI日志记录
  • 异常管理
将这种功能需求视为一个大型单片模块将迫使开发人员将所有子例程按顺序作为一个all来实现。
然而,有了清晰的应用程序体系结构,您就可以开始处理更通用和更横向的模块,同时还可以细化其他更面向业务的模块


它还迫使您定义更多接口,并分析不同模块必须解决的相互通信问题(直接n对n类型学?总线?,…)

应该是“分而治之”的一个很好的解释……)+1对我来说,这是模块化(以及封装)的首要重要性。这是一种通过限定解决方案的一小部分范围来减少进行更改所需的工作集的能力,而不必考虑(太多)更大的系统。对于大型系统,我知道我不够聪明,无法把所有这些都记在脑子里!