Java 检索嵌套对象列表的方法属于哪个服务类?
这适用于任何语言,但我使用Java来实现这一点,所以Java 检索嵌套对象列表的方法属于哪个服务类?,java,design-patterns,language-agnostic,Java,Design Patterns,Language Agnostic,这适用于任何语言,但我使用Java来实现这一点,所以 public class Egg { ... } public class BirdNest { private List<Egg> eggs; ... } 公共类鸡蛋{ ... } 公共类鸟类{ 私人名单鸡蛋; ... } 我还有与这些类匹配的数据库实体。基本上,BirdNest与Egg有1:M的关系 要在这些类上执行持久性/检索操作,我还有一个BirdNestService和一个EggServ
public class Egg {
...
}
public class BirdNest {
private List<Egg> eggs;
...
}
公共类鸡蛋{
...
}
公共类鸟类{
私人名单鸡蛋;
...
}
我还有与这些类匹配的数据库实体。基本上,BirdNest
与Egg
有1:M的关系
要在这些类上执行持久性/检索操作,我还有一个BirdNestService
和一个EggService
假设我想从给定的鸟巢中检索鸡蛋列表
我可以有一个方法,比如List-getegs(int-birdNestId)代码>
我的问题是,像这样的方法应该属于哪个服务
它基于特定的鸟巢执行操作,因此您可以认为它应该是BirdNestService
的一部分
然后,您可以再次争辩它正在检索的项目是Egg
,因此它应该属于EggService
我认为它是BirdNestService
的一部分,因为Egg只是一个实体,它不依赖于Nest。但巢里有蛋,否则巢里没有蛋就没用了。巢靠蛋,蛋不靠巢。在我看来,Nest必须有他拥有的蛋的信息,并且它已经包含了你在类中描述的蛋列表,蛋不需要记住它们的巢Id,除非你有一个非常复杂的场景,你想通过它们的蛋或某些特定的要求来找到巢Id 我认为它是BirdNestService
的一部分,因为Egg只是一个实体,它不依赖于Nest。但巢里有蛋,否则巢里没有蛋就没用了。巢靠蛋,蛋不靠巢。在我看来,Nest必须有他拥有的蛋的信息,并且它已经包含了你在类中描述的蛋列表,蛋不需要记住它们的巢Id,除非你有一个非常复杂的场景,你想通过它们的蛋或某些特定的要求来找到巢Id 如果您将其放入EggService
中,则此服务知道BirdNest
概念(birdNestId
),而这不是您想要的
因此答案是BirdNestService
如果你把它放在EggService
中,那么这个服务知道一个BirdNest
概念(birdnestd
),这不是你想要的
因此答案是BirdNestService
BirdNestService
不应该需要像List-getegs(int-birdnesid)这样的方法代码>。
如果您想从给定的birdnest中检索鸡蛋,那么应该很简单:列出myEggs=myBirdNest.getegs()
BirdNestService
应该有您想在BirdNest上使用的操作(方法),例如BirdNest buildBirdNest(int-amountStems,Bird-byBird)
BirdNestService
不应该需要像List-getegs(int-birdnestd)这样的方法代码>。
如果您想从给定的birdnest中检索鸡蛋,那么应该很简单:列出myEggs=myBirdNest.getegs()
BirdNestService
应该有您想要在BirdNest上使用的操作(方法),例如BirdNest buildBirdNest(intamountstems,Bird byBird)
我认为应该是EggService
原因是目前您的查询只需要鸟巢的鸡蛋,但情况可能并非总是如此。明天你可能需要根据某些特征来寻找鸡蛋,例如大小、颜色等
因此,我会选择EggService,因为毕竟你是在试图识别具有某种特征的蛋——在这种情况下,蛋属于某种鸟类。我认为应该是EggService
原因是目前您的查询只需要鸟巢的鸡蛋,但情况可能并非总是如此。明天你可能需要根据某些特征来寻找鸡蛋,例如大小、颜色等
因此,我会选择EggService,因为毕竟您正在尝试识别具有特定特征的蛋——在本例中,它属于特定的鸟巢。List getegs(int birdnesid)方法要求在特定鸟巢中包含蛋。我的想法是:
- 从概念上讲,鸟巢存储蛋的句柄(ID)。从数据库的角度来看,egg表中包含外键。实际的鸡蛋存储在蛋表中
- 因此,向BirdNestService请求鸟巢的蛋更有意义,鸟巢可以进行一些验证,比如它是否是有效的鸟巢id,然后检索蛋的句柄
- 然后,它可以咨询EggService,以提供与id列表匹配的鸡蛋列表
因此,我更愿意在BirdNestService中使用List GetOggs(int birdNestId)方法,并在EggService中添加如下方法:
列出getEggs(列出eggIds)
但同样,没有正确或错误的答案。这将取决于是什么使您的设计干净、连贯和可维护。List-getegs(int-birdnesid)方法要求特定巢中包含蛋。我的想法是:
- 从概念上讲,鸟巢存储蛋的句柄(ID)。从数据库的角度来看,egg表中包含外键。实际的鸡蛋存储在蛋表中
- 因此,向BirdNestService请求鸟巢的蛋更有意义,鸟巢可以进行一些验证,比如它是否是有效的鸟巢id,然后检索蛋的句柄
- 然后,它可以咨询EggService,以提供与id列表匹配的鸡蛋列表
因此,我更愿意在BirdNestService中使用List GetOggs(int birdNestId)方法,并在EggService中添加如下方法:
列出getEggs(列出eggIds)
但同样,没有正确或错误的答案。这将取决于