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