Spring - 包结构 - [.../compontent/layer] 与 [.../layer/component]
Spring - Package structure - [.../compontent/layer] vs [.../layer/component]
我们目前有一个更大的 Spring 项目,它由不同的项目组件组成。不幸的是,包装目前比较不利,这就是为什么我想重构整个东西。
我们的基本框架逐层使用,这就是为什么我——至少目前——想在我们的项目中坚持使用它。请问您觉得哪种比较有用:
变体 1:
- src/main/java
- com/company/core
- dao
- CoreThing1Repository
- CoreThing2Repository
- domain
- CoreThing1
- CoreThing2
- dto
- service
- CoreThing1Service
- CoreThing2Service
- com/company/component1
- dao
- Thing1Repository
- Thing2Repository
- domain
- Thing1
- Thing2
- dto
- service
- Thing1Service
- Thing2Service
- com/company/component2
- dao
- Thing3Repository
- Thing4Repository
- domain
- Thing3
- Thing4
- dto
- service
- Thing3Service
- Thing4Service
- com/company/component3
- dao
- Thing5Repository
- Thing6Repository
- domain
- Thing5
- Thing6
- dto
- service
- Thing5Service
- Thing6Service
变体 2:
- src/main/java
- com/company/dao
- core
- CoreThing1Repository
- CoreThing2Repository
- component1
- Thing1Repository
- Thing2Repository
- component2
- Thing3Repository
- Thing4Repository
- component3
- Thing5Repository
- Thing6Repository
- com/company/domain
- core
- CoreThing1
- CoreThing2
- component1
- Thing1
- Thing2
- component2
- Thing3
- Thing4
- component3
- Thing5
- Thing6
- com/company/dto
- core
- CoreThing1Repository
- CoreThing2Repository
- component1
- Thing1Repository
- Thing2Repository
- component2
- Thing3Repository
- Thing4Repository
- component3
- Thing5Repository
- Thing6Repository
- com/company/service
- core
- CoreThing1Service
- CoreThing2Service
- component1
- Thing1Service
- Thing2Service
- component2
- Thing3Service
- Thing4Service
- component3
- Thing5Service
- Thing6Service
在内容方面,我非常喜欢变体1,因为组件更好-但是整个事情既不是按功能封装也不是按层封装?你应该做这样的混合吗?
您会选择哪种变体或您在您的环境中使用哪种变体?
我非常喜欢变体1。原因是您可以更好地控制 class 方法的可见性。
DAO class 就是一个很好的例子。通常,您不希望 DAO class 被其他服务访问,而不是关于相同业务逻辑的服务(在您的情况下是关于相同组件的服务)。如果您使用变体 2,则不能这样做,因为所有方法都必须 public,以便相应的服务能够调用 DAO class。但是您实际上可以在 Java 中使用 no 修饰符或 protected 修饰符来执行此操作。这将使您的代码更具可读性和组织性。此外,添加或删除组件会更容易,因为它的所有逻辑都在同一个包中。
我们目前有一个更大的 Spring 项目,它由不同的项目组件组成。不幸的是,包装目前比较不利,这就是为什么我想重构整个东西。
我们的基本框架逐层使用,这就是为什么我——至少目前——想在我们的项目中坚持使用它。请问您觉得哪种比较有用:
变体 1:
- src/main/java
- com/company/core
- dao
- CoreThing1Repository
- CoreThing2Repository
- domain
- CoreThing1
- CoreThing2
- dto
- service
- CoreThing1Service
- CoreThing2Service
- com/company/component1
- dao
- Thing1Repository
- Thing2Repository
- domain
- Thing1
- Thing2
- dto
- service
- Thing1Service
- Thing2Service
- com/company/component2
- dao
- Thing3Repository
- Thing4Repository
- domain
- Thing3
- Thing4
- dto
- service
- Thing3Service
- Thing4Service
- com/company/component3
- dao
- Thing5Repository
- Thing6Repository
- domain
- Thing5
- Thing6
- dto
- service
- Thing5Service
- Thing6Service
变体 2:
- src/main/java
- com/company/dao
- core
- CoreThing1Repository
- CoreThing2Repository
- component1
- Thing1Repository
- Thing2Repository
- component2
- Thing3Repository
- Thing4Repository
- component3
- Thing5Repository
- Thing6Repository
- com/company/domain
- core
- CoreThing1
- CoreThing2
- component1
- Thing1
- Thing2
- component2
- Thing3
- Thing4
- component3
- Thing5
- Thing6
- com/company/dto
- core
- CoreThing1Repository
- CoreThing2Repository
- component1
- Thing1Repository
- Thing2Repository
- component2
- Thing3Repository
- Thing4Repository
- component3
- Thing5Repository
- Thing6Repository
- com/company/service
- core
- CoreThing1Service
- CoreThing2Service
- component1
- Thing1Service
- Thing2Service
- component2
- Thing3Service
- Thing4Service
- component3
- Thing5Service
- Thing6Service
在内容方面,我非常喜欢变体1,因为组件更好-但是整个事情既不是按功能封装也不是按层封装?你应该做这样的混合吗?
您会选择哪种变体或您在您的环境中使用哪种变体?
我非常喜欢变体1。原因是您可以更好地控制 class 方法的可见性。
DAO class 就是一个很好的例子。通常,您不希望 DAO class 被其他服务访问,而不是关于相同业务逻辑的服务(在您的情况下是关于相同组件的服务)。如果您使用变体 2,则不能这样做,因为所有方法都必须 public,以便相应的服务能够调用 DAO class。但是您实际上可以在 Java 中使用 no 修饰符或 protected 修饰符来执行此操作。这将使您的代码更具可读性和组织性。此外,添加或删除组件会更容易,因为它的所有逻辑都在同一个包中。