提问人:noobcoder 提问时间:11/9/2018 最后编辑:Ali Soltaninoobcoder 更新时间:11/18/2018 访问量:178
检索嵌套对象列表的方法属于哪个服务类?
Which service class do methods retrieving lists of nested objects belong to?
问:
这适用于任何语言,但我正在使用 Java,所以......
public class Egg {
...
}
public class BirdNest {
private List<Egg> eggs;
...
}
我也有与这些类匹配的数据库实体。基本上,与 有 1:M 的关系。BirdNest
Egg
为了对这些类执行持久性/检索操作,我还有一个和一个.BirdNestService
EggService
假设我想从给定的燕窝中检索鸡蛋列表。
我可以有这样的方法List<Egg> getEggs (int birdNestId);
我的问题是,像这样的方法应该属于哪个服务?
它基于特定的鸟巢执行操作,因此您可以争辩说它应该是 .BirdNestService
然后,您可以争辩说它正在检索的项目是 的,因此它应该属于 .Egg
EggService
答:
我认为这是的一部分,因为 Egg 只是一个实体,它不依赖于 Nest。但是 Nest 包含鸡蛋,否则没有鸡蛋的 Nest 就毫无用处。Nest 依赖于 Eggs,但 Eggs 不依赖于 Nest。在我看来,Nest 必须有他拥有哪些蛋的信息,并且它已经包含您在课程中描述的蛋列表,并且蛋不需要记住它们的巢 ID,除非您有一个非常复杂的场景,您想通过它们的蛋或某些特定要求来查找巢穴 ID。BirdNestService
如果你把它放进去,那么这个服务就知道一个概念(),这不是你想要的。EggService
BirdNest
birdNestId
所以答案是.BirdNestService
BirdNestService
不需要像这样的方法。
如果你想从给定的燕窝中取回鸡蛋,那么它应该很简单:
应该有你想在鸟巢上使用的操作(方法),例如.List<Egg> getEggs (int birdNestId);
List<Egg> myEggs = myBirdNest.getEggs()
BirdNestService
BirdNest buildBirdNest(int amountStems, Bird byBird)
我会说它应该是 EggService。
原因是目前您的查询只需要 Birds Nest 的 Eggs,但情况可能并非总是如此。明天您可能需要根据某些特征(例如大小、颜色等)找到鸡蛋......
因此,我会选择 EggService,因为毕竟您正在尝试识别具有特定特征的鸡蛋 - 在这种情况下属于某个燕窝。
List getEggs (int birdNestId) 方法请求特定巢穴中包含的蛋。我的想法是:
- 从概念上讲,燕窝存储鸡蛋的句柄(ID)。从数据库的角度来看,外键到蛋表。实际的鸡蛋储存在鸡蛋表中。
- 因此,向 BirdNestService 询问巢穴的蛋更有意义,它可以进行一些验证,例如它是否是有效的巢穴 ID,然后检索蛋的句柄。
- 然后,它可以咨询 EggService 以提供与 ID 列表匹配的鸡蛋列表。
因此,我更愿意在 BirdNestService 中使用 List getEggs (int birdNestId) 方法方法,并将在 EggService 中添加一个方法,如下所示: 列出 getEggs(列出 eggIds)。
但同样,没有正确或错误的答案。这将取决于是什么使您的设计干净、连贯和可维护。
检索实体的属性,因此它是嵌套的一部分。不用费吹灰之力。
现在,如果您有属性 birdnestid,并且您按该属性过滤了您的鸡蛋数据库,它将是鸡蛋实体的一部分,因此您将将其放入鸡蛋服务中。
经验法则:只要是属性就可以了。
这样,您就可以在两个不同的服务中使用这两种方法。
这也适用于多层属性:这取决于用作基础的实体
你应该使用哪个?根据经验,使用从上到下的方法:当您需要孩子时,总是去找父母
上一个:应记录哪些层的异常?
评论