如何使代码模块化?

我有一些Java程序,现在我想知道它是否是模块化的,如果它是模块化的,那么到什么程度,因为模块化不能是二元术语,即0或1.我如何确定特定的代码是模块化的达到这个程度。 我想知道如何使代码更加模块化?


一些模块化基准:

  • 你有多少次重写类似的代码来完成特定的任务?
  • 如果您在程序的某个部分更改了某些内容,您需要重构多少代码才能重构代码
  • 文件是否更小,更容易浏览?
  • 应用程序模块在需要时是否充分独立运行?
  • 你的代码有多灾难 ? 当你删除一个函数或变量时,所有的地狱破坏都会丢失吗? 重新命名课程时,你会得到20多个错误吗? (对于实例,您可以实现堆栈机制以跟踪应用程序中所有跳数的跟踪)
  • 自然语言使用的代码有多近 (即,模块及其子组件代表更多真实世界对象,而不关心网络源文件大小)。
  • 欲了解更多的想法,请查看此软件质量

    至于你的问题首先让你的代码更模块化,你应该问自己上面的问题,为他们获得具体的答案,然后看看这个

    基本的理念是将您的应用程序分解成尽可能小的代码片段,整齐排列在众多易于理解和易于访问的目录布局上。

    应用程序中的每种方法都不得超过所需的最小处理量 。 将这些方法组合成越来越多的宏观层次方法应该会引导您回到您的应用程序


    要点是

  • 关注点分离
  • 凝聚
  • 封装(通过接口进行通信)
  • 可替代性
  • 可重用性
  • 这种模块系统的一个很好的例子是标准的汽车零件,如盘式制动器和汽车音响。 在建造汽车时,您不想从头开始制造汽车音响。 您宁愿购买并插上它。您也不希望制动系统影响汽车立体声 - 或者更糟的是汽车立体声会影响制动系统。

    要回答你的问题,“我如何决定特定的代码在这么大程度上是模块化的”,我们可以形成问题来测试模块性。 你能否轻易地用你的模块替换你的模块而不影响你的应用的其他部分?

    XML解析器可能是另一个例子。 一旦你获得了DOM接口,你真的不关心在下面使用XML解析器的实现(例如Apache Xerces或JAXP)。

    在Java中,另一个问题可能是: 是否所有功能都可以通过interface s访问? 界面非常注意低耦合。

    另外, 你能用一句话来描述系统中的每个模块吗? 例如,汽车音响播放音乐和收音机。 盘式制动器安全地减速车辆。


    (这是我写给什么是组件驱动开发的内容?)

    根据维基百科,基于组件的开发是基于组件的软件工程(CBSE)的别名。

    [它]是软件工程的一个分支,其优先级是关于在整个给定的软件系统中可用的广泛功能方面的分离问题。

    这有些模糊,所以让我们看看更多的细节。

    单个组件是封装一组相关功能(或数据)的软件包或模块。

    所有的系统进程都被放置在单独的组件中,以便每个组件内的所有数据和函数在语义上是相关的(就像类的内容一样)。 由于这个原理,人们经常说组件是模块化和内聚的。

    因此,根据这个定义,一个组件可以是任何东西,只要它真的做得很好,而且只做一件事。

    关于系统协调,组件之间通过接口进行通信。 [...]这个原则导致组件被称为封装。

    因此,这听起来越来越像我们认为良好的API或SOA应该看起来像。

    提供的接口由棒棒糖表示,所需的接口由UML中的组件外边缘上的开放套接字符号表示。

    替代文字http://upload.wikimedia.org/wikipedia/commons/e/e1/Component-based-Software-Engineering-example2.gif

    组件的另一个重要属性是它们是可替代的,以便如果后继组件满足初始组件的要求(通过接口表示),则可以用另一个组件(在设计时或运行时)替换组件。

    可重用性是高质量软件组件的重要特征。 应该设计和实现一个软件组件,以便它可以在许多不同的程序中重复使用。

    可替代性和可重用性是使组件成为组件的原因。 那么这和面向对象编程有什么区别呢?

    面向对象编程(OOP)的思想是软件应该根据它所代表的实际或想象对象的心理模型来编写。 [...]

    相比之下,基于组件的软件工程没有做出这样的假设,而是指出应该通过将预制组件粘合在一起来开发软件,就像电子或机械领域一样。


    要回答您如何使代码更加模块化的具体问题,有几种方法:

  • 模块化的最佳工具之一是发现代码重用。 如果你发现你的代码在不止一次的地方完全相同(或者非常相似),那么它是模块化的好选择。

  • 确定哪些逻辑可以独立完成,从某种意义上说,其他逻辑可以使用它们而不需要知道它们是如何构建的。 这与您在OO设计中所做的有些类似,尽管模块/组件不一定需要与OO中的建模对象相对应。

  • 链接地址: http://www.djcxy.com/p/30681.html

    上一篇: How to make code modular?

    下一篇: How to modularize a (large) Java App?