Java 如何避免存储库和域层中的重复?

Java 如何避免存储库和域层中的重复?,java,repository,domain-driven-design,Java,Repository,Domain Driven Design,假设我们有一个person类,有两种不同的情况: 1) 我们需要从数据库中获取所有成人用户 2) 我们需要分成两人一组-成人和非成人 因此,在第一种情况下,我更愿意在存储库层使用where子句进行操作。 从年龄>18岁的人中选择* 在第二种情况下,我有一个方法来确定是否是成年人 在这种情况下,避免sql和java代码中逻辑重复的最佳做法是什么?一种可能的解决方案: 在Person实体中添加像isAdult这样的属性,它可以是计算属性(returnage>18),它是逻辑所在的单一位置 在数据库

假设我们有一个person类,有两种不同的情况:

1) 我们需要从数据库中获取所有成人用户
2) 我们需要分成两人一组-成人和非成人

因此,在第一种情况下,我更愿意在存储库层使用where子句进行操作。
从年龄>18岁的人中选择*

在第二种情况下,我有一个方法来确定是否是成年人

在这种情况下,避免sql和java代码中逻辑重复的最佳做法是什么?

一种可能的解决方案:

  • 在Person实体中添加像
    isAdult
    这样的属性,它可以是计算属性(
    returnage>18
    ),它是逻辑所在的单一位置
  • 在数据库中存储
    isAdult
  • 当需要从数据库中获取所有成年人时,您只需查询
    Select*from person,其中isAdult=1
  • 当需要在逻辑上区分成年人时,只需使用属性
    if(person.isAdult())…

仅仅是一种观点:提出“最佳实践”问题来解决一个非常实际的问题似乎是不对的。查看每个选项的含义(例如,哪个运行速度更快,哪个消耗的内存最少,哪个是可移植的,哪个看起来更易于维护,等等),然后根据这些来决定。除此之外,我个人的观点是获取应用程序中的所有条目并拆分列表(只要有意义)。我只是试图证明我有两个用例,并描述了在每一个用例中我更喜欢什么。一个更正确的问题是,是否有某种库、框架或其他技术可以为确定成人年龄的方法提供足够的抽象,以便从这些抽象中生成sql或验证对象。