Java 奥斯基:我应该有一个刀包吗?

Java 奥斯基:我应该有一个刀包吗?,java,osgi,dao,Java,Osgi,Dao,假设我有一个业务应用程序模块,比如用户管理(um)。 捆绑包设计有两种方式(我可以告诉你) 数据源、um模型、um dao、um服务、um wab B.数据源、um api、um impl B是我现在喜欢的 我的一些考虑: 根据“java应用程序体系结构:使用osgi示例的模块化模式”,我想要细粒度的模块,而不是粗粒度的模块。 但是,方法A的粒度太细。道应该是私人的。如果另一个模块预订房间,将查询用户,则应取决于模块(捆绑包)um api 很少有人会设计模块(bundle)um dao api、

假设我有一个业务应用程序模块,比如用户管理(um)。 捆绑包设计有两种方式(我可以告诉你)

数据源、um模型、um dao、um服务、um wab

B.数据源、um api、um impl

B是我现在喜欢的

我的一些考虑:

  • 根据“java应用程序体系结构:使用osgi示例的模块化模式”,我想要细粒度的模块,而不是粗粒度的模块。 但是,方法A的粒度太细。道应该是私人的。如果另一个模块预订房间,将查询用户,则应取决于模块(捆绑包)um api
  • 很少有人会设计模块(bundle)um dao api、um dao jpa impl、um dao jdbc impl、um dao jdo impl。也许UMAPI、UMLDAP impl、UMAVOS委托impl是更好的设计
  • 数据源是一个模块(bundle),因为我需要应用程序模块之间的事务
  • 所以,我不认为刀应该是捆绑的

    有什么想法吗


    谢谢

    虽然这里总有一些品味问题,但我的经验是,以下可能是一个很好的起点:

    • 通过将接口定义(API)放在不同的捆绑包中,将其与实现分离。一个包只包含带有接口的包(可能还有一些非常基本的POJO),实现被放在不同包中的一个或多个其他包中。原因:由于实现经常发生变化,随着时间的推移,依赖关系往往变得更加复杂。将API包放在单独的包中可能会避免额外的维护工作
    • 为您的接口包和包中的包建立一个清晰的分层体系结构。原因:如果没有明确定义软件包之间的功能分离,那么在其维护过程中可能会变得更加混乱
    • 如果您怀疑某些功能是否仅对您的实现捆绑包有私人用途,或者将来可能会被其他功能使用,那么它可能最终会被其他人使用。但是,您始终可以决定在实现包中定义私有接口包,将来可以很容易地将其移动到API包中。没有什么可以阻止您在实现包中使用模块化体系结构,尽管有些人认为这是不必要的,因为这一部分对外部世界基本上是不可见的(我不同意这一点)
    在您的情况下:如果您不希望其他功能使用DAO,那么制作接口包并将其与实现一起放在实现包中,但不要导出包。如果以后需要导出,请将接口包移动到API包中