【问题标题】:How important is modularization of software projects软件项目的模块化有多重要
【发布时间】:2009-08-11 03:56:47
【问题描述】:

模块化显然在软件项目中很重要,但我想知道人们对如何重要以及为什么原因它很重要的看法。自从我提出这个问题以来,我显然已经有了自己的想法,但把它想象成一场关于应该模块化软件项目的原因的“共同头脑风暴”......

【问题讨论】:

  • 应该是社区维基

标签: architecture modularization


【解决方案1】:

在一次处理复杂问题方面,我们人类是有限的。然而,我们有能力将一个复杂的问题分解为(可能非常大)数量不太复杂的单个问题,以便解决大问题。

这从根本上推动了诸如“重用”、“关注点分离”、“更易于维护”之类的答案。

所有这些原因都是正确的,无论是一个人分解一个复杂的问题以逐个解决,还是一组人分解它以分散复杂性。

【讨论】:

  • 对“分而治之”的精彩解释... :) +1
  • 对我来说,这是模块化(和封装,就此而言)的首要重要性。它是通过限定解决方案的一小部分来减少进行更改所需的工作集的能力,而不必(过多地)考虑更大的系统。对于大型系统,我知道 不够聪明,无法将这一切都记在脑海中!
【解决方案2】:

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

另外,它更容易理解。我不能同时在脑海中记住很多事情。当代码是模块化的时,就更容易建立一个对自身有意义的事物的“区域”。而一旦这个区域变得很小,我可以将其理解为整体,而不是部分。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        也可以看成Application Architecture的一项基本活动:

        • 需要一些业务和功能规范
        • 在识别非功能模块和纯技术横向模块的同时,将主要功能分组到应用程序中

        这就是为什么“金融投资组合计算”实际上会分为:

        • 计算模块
        • 调度程序模块(因为投资组合太大而无法在一台服务器上计算)
        • 一个启动器模块(用于引导所有计算)
        • GUI(查看实际情况)

        加上几个横向的:

        • KPI 记录
        • 异常管理

        将这种功能需求视为一个大的单体模块将迫使开发人员将所有子例程按顺序实现。
        而有了清晰的应用程序架构,您就可以开始着手处理更通用和横向的模块,同时仍然可以改进其他更面向业务的模块。

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

        【讨论】:

          猜你喜欢
          • 2017-07-18
          • 2010-10-26
          • 2013-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多