如何在Java软件架构中使用可插拔功能和模块?

时间:2014-08-02 00:48:13

标签: java architecture software-design

我即将开始一个新的软件项目。我知道一个好的规划和软件设计最终会导致一个成功的软件项目。

我想知道,我如何进行软件架构,其中包含核心模块和其他可插拔或附加模块。可以根据客户需求和定价排除和包含模块,并可以根据客户自己的配置关闭和打开模块。

例如,让我们使用一些财务软件,并且有一个模块可以对市场客户进行统计。然后我的产品的一些客户 - 不想购买这个模块,因为他们不需要它。设计我的架构的最佳方法是什么,以便我可以用最少的努力和最少的代码触摸来排除 - 如果可能的话,根本不接触它 - ? 我们可以讨论包组织等几个主题,使用JPF,Interface和Inheritance等一些框架......

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是一个非常广泛的主题,用于在stackoverflow讨论中总结它,但让我们试试。在我看来,第一个真正基本的需求是对软件将要服务的领域有非常详细的了解。在开始任何不提及编码的设计之前,首先要有域的必要技术诀窍。

有了这些,您就开始定义一些核心模块,这些模块将成为您软件的基础。通常,例如,您需要网络,配置,io,核心,持久性,工具等。我个人定义一个包含模块的模块,例如,如果我说核心模块我会引用诸如以下的包:com.example.core com.example.core.utils。核心包是更多的基础设施工作。比如在开始构建真实软件之前做好准备。

在黑板上设置单独模块及其依赖项的设计,一个好的做法是使用maven作为构建工具。将每个模块设计为一个单独的项目,并将其作为依赖关系通过maven包含在其他模块/项目中。这将形成插件模块。在每个模块中提供配置支持(基于xml,json甚至普通txt文件),因此可以打开/关闭或修改某些功能。因此,基于许可协议,您可以轻松地提供具有所需模块的构建,并在每个模块内修改功能配置。

答案 1 :(得分:0)

这是一个非常有趣的问题,开发人员通常认为这是理所当然的。

一些开发人员认为只是跳入代码会产生超时的想法,要求和功能 - 但这可能是真的,但往往会危及良好的架构,灵活性和稳健性。

对于新软件,时间应该用于需求收集(即使可能,阅读并获得关于域及其当前流程流程,规则和其他约束的广泛和具体的理解。

  1. 更多地了解域
  2. 提出要求文件
  3. 识别域中的关键对象
  4. 创建一个简单的模型图并在广泛的背景下识别关系
  5. 确定主要用例
  6. 虽然这段时间似乎被浪费了,而且在产生想法和要求方面也是死路一条,回顾过去,人们总会欣赏为实现这一目标而牺牲的时间

    我最近也开始了一个新的软件项目,并且在规划方面非常艰难,但从长远来看。我和其他通过需求文档和图表查看的人都对它表示赞赏。

    特定于您的问题,元编程是一种非常好的方法来建模可扩展的核心模块............查看这个openMRS开源软件有一个想法一个非常好的核心架构