检索嵌套对象列表的方法属于哪个服务类?

Which service class do methods retrieving lists of nested objects belong to?

提问人:noobcoder 提问时间:11/9/2018 最后编辑:Ali Soltaninoobcoder 更新时间:11/18/2018 访问量:178

问:

这适用于任何语言,但我正在使用 Java,所以......

public class Egg {
    ...
}

public class BirdNest {

    private List<Egg> eggs;

    ...
}

我也有与这些类匹配的数据库实体。基本上,与 有 1:M 的关系。BirdNestEgg

为了对这些类执行持久性/检索操作,我还有一个和一个.BirdNestServiceEggService

假设我想从给定的燕窝中检索鸡蛋列表。

我可以有这样的方法List<Egg> getEggs (int birdNestId);

我的问题是,像这样的方法应该属于哪个服务?

它基于特定的鸟巢执行操作,因此您可以争辩说它应该是 .BirdNestService

然后,您可以争辩说它正在检索的项目是 的,因此它应该属于 .EggEggService

Java 设计模式 语言无关

评论


答:

0赞 Khalid Shah 11/9/2018 #1

我认为这是的一部分,因为 Egg 只是一个实体,它不依赖于 Nest。但是 Nest 包含鸡蛋,否则没有鸡蛋的 Nest 就毫无用处。Nest 依赖于 Eggs,但 Eggs 不依赖于 Nest。在我看来,Nest 必须有他拥有哪些蛋的信息,并且它已经包含您在课程中描述的蛋列表,并且蛋不需要记住它们的巢 ID,除非您有一个非常复杂的场景,您想通过它们的蛋或某些特定要求来查找巢穴 ID。BirdNestService

9赞 Nghia Bui 11/9/2018 #2

如果你把它放进去,那么这个服务就知道一个概念(),这不是你想要的。EggServiceBirdNestbirdNestId

所以答案是.BirdNestService

0赞 ndueck 11/17/2018 #3

BirdNestService不需要像这样的方法。
如果你想从给定的燕窝中取回鸡蛋,那么它应该很简单:
应该有你想在鸟巢上使用的操作(方法),例如.
List<Egg> getEggs (int birdNestId);List<Egg> myEggs = myBirdNest.getEggs()BirdNestServiceBirdNest buildBirdNest(int amountStems, Bird byBird)

0赞 Sid Malani 11/17/2018 #4

我会说它应该是 EggService。

原因是目前您的查询只需要 Birds Nest 的 Eggs,但情况可能并非总是如此。明天您可能需要根据某些特征(例如大小、颜色等)找到鸡蛋......

因此,我会选择 EggService,因为毕竟您正在尝试识别具有特定特征的鸡蛋 - 在这种情况下属于某个燕窝。

0赞 K. M. Fazle Azim Babu 11/18/2018 #5

List getEggs (int birdNestId) 方法请求特定巢穴中包含的蛋。我的想法是:

  • 从概念上讲,燕窝存储鸡蛋的句柄(ID)。从数据库的角度来看,外键到蛋表。实际的鸡蛋储存在鸡蛋表中。
  • 因此,向 BirdNestService 询问巢穴的蛋更有意义,它可以进行一些验证,例如它是否是有效的巢穴 ID,然后检索蛋的句柄。
  • 然后,它可以咨询 EggService 以提供与 ID 列表匹配的鸡蛋列表。

因此,我更愿意在 BirdNestService 中使用 List getEggs (int birdNestId) 方法方法,并将在 EggService 中添加一个方法,如下所示: 列出 getEggs(列出 eggIds)。

但同样,没有正确或错误的答案。这将取决于是什么使您的设计干净、连贯和可维护。

0赞 Andrii Plotnikov 11/18/2018 #6

检索实体的属性,因此它是嵌套的一部分。不用费吹灰之力。

现在,如果您有属性 birdnestid,并且您按该属性过滤了您的鸡蛋数据库,它将是鸡蛋实体的一部分,因此您将将其放入鸡蛋服务中。

经验法则:只要是属性就可以了。

这样,您就可以在两个不同的服务中使用这两种方法。

这也适用于多层属性:这取决于用作基础的实体

你应该使用哪个?根据经验,使用从上到下的方法:当您需要孩子时,总是去找父母