【问题标题】:Module wise development in Java [closed]Java中的模块化开发[关闭]
【发布时间】:2015-10-23 18:59:32
【问题描述】:

我即将开发一个 Java 桌面应用程序,我希望将其保留在模块中,以便我轻松自定义。例如,让我们以计费系统为例。现在我可以把它分成几个模块

  1. 会计
  2. 计费
  3. 打印账单
  4. 给账单发邮件

如果有人告诉我“我不需要打印账单”,那么我可以删除“打印账单”模块等等。

我在一些应用程序 (C++) 中看到它们被开发为单独的应用程序并以某种方式组合在一起。

在 Java 中,模块化开发的最佳方式是什么?我知道的最好的方法是通过接口创建包和管理事物。

无论它是什么,主要优点是在出现自定义时最大程度地减少工作量。有什么建议?

【问题讨论】:

    标签: java architecture module package


    【解决方案1】:

    回答“最佳方式”的问题很难,因为您只能用“取决于具体情况”以及开发人员的意见来回答。

    我建议您采取一种方法,在模块之间定义清晰的接口,并可能将它们拆分为单独的 jar。这允许您在接口的抽象中隐藏实现细节,您无需关心,只需调用正确的接口即可。

    对于高度定制,我更喜欢“配置优于代码”,这意味着您通过配置而不是通过部署特定的二进制文件来选择使用的模块。再次使用单独的罐子,两者都是可能的。

    所以我认为您使用不同的包和接口的想法对我来说似乎非常有效。也许我会把它们打包到不同的罐子里,或者根据配置使用它们。

    我认为使用一堆不同的可执行文件并通过管道连接它们也是一种选择,但我不喜欢它,因为它增加了处理不同可执行文件之间通信的工作量。当您的应用程序“一体化”处理它时,这是不必要的重载。

    【讨论】:

    • 用户界面应该在主程序中吧?
    【解决方案2】:

    将部件分离为工件,内置于众多jars。隐藏接口后面的所有内容。然后有一个使用所有需要的工件并将它们集成在一起的“应用程序”项目。使用 Maven 或 Gradle 等依赖管理工具将它们一起构建,并使用 Spring 将模块集成到生成的应用程序中。

    对于桌面应用程序,您可能希望使用Eclipse RCPNetbeans RCP 之类的平台——它们都有自己的插件系统和依赖注入/集成框架。

    【讨论】:

    • 这是一个桌面应用程序。 ui呢?它也内置在另一个包中?
    • 我认为用户界面我们做不到
    • 编辑添加了创建模块化桌面 GUI 应用程序的可能方式。或者您可以使用第一种方法,将您的 GUI 应用程序作为集成模块。
    【解决方案3】:

    一种天真的方法是只使用包来对代码进行功能分区。您还希望您的包具有尽可能少的依赖项。任何共享依赖项都应该在其他包中“向上移动”,例如“core”或其他需要它的包的依赖项。

    一个基于你的简单示例:

    • 打包客户端可以操纵客户端
    • 包会计将处理客户帐户信息并依赖于客户
    • 包裹计费将处理计费并取决于客户(或会计?)
    • package billing.receipt 将处理收据生成并依赖于计费(并间接依赖于客户端)
    • package billing.receipt.printing 将处理收据打印并依赖于 billing.receipt(并间接依赖于 billing 和客户端)
    • package billing.receipt.email 将处理收据电子邮件发送并依赖于 billing.receipt(并间接依赖于 billing 和客户端)

    对于更工业化的版本,您应该将代码分成具有相互依赖关系的不同 Java 项目,您可以使用 Maven 等工具将这些项目构建到单个应用程序中。包分离仍然存在,但使用不同的项目和正式的构建过程将有助于实施弱耦合。

    【讨论】:

    • 似乎是一个很好的答案。你能再解释一下吗?
    • 举个例子,如果我拿了accounting包,我应该把我的“Billing”包移到“UI”包下面吗?
    • @Tracer 我不知道你的 UI 包指的是什么,但如果它是用户界面,它似乎不合适
    • @Tracer 进一步编辑了我的答案以添加有关工业化的信息。
    • 用户界面应该在主程序中吧?
    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 2012-02-03
    • 2010-11-09
    • 1970-01-01
    • 2020-12-12
    • 2021-06-01
    • 2019-09-02
    相关资源
    最近更新 更多