这适用于任何语言,但是我为此使用Java ...
public class Egg {
...
}
public class BirdNest {
private List<Egg> eggs;
...
}
我也有匹配这些类的数据库实体。基本上,BirdNest
与Egg
具有1:M的关系。
要对这些类执行持久性/检索性操作,我还具有一个BirdNestService
和一个EggService
。
说我想从给定的鸟巢中检索鸡蛋列表。
我可以使用类似List<Egg> getEggs (int birdNestId);
我的问题是,像这样的方法应该属于哪个服务?
它是基于特定的鸟巢执行操作的,因此您可以认为它应该是BirdNestService
的一部分。
然后您又可以说它正在检索的项目是Egg
,因此它应该属于EggService
。
答案 0 :(得分:9)
如果将其放入using System.Windows;
using Microsoft.Office.Interop.Word;
using Application = Microsoft.Office.Interop.Word.Application;
public class MainWindowViewModel : BaseViewModel
{
...
... some view model initialization
...
public bool AreControlsEnabled { get; set; } = true;
private void OpenWord ()
{
AreControlsEnabled = false;
var app = new Application()
{
Visible = true
};
var doc = app.Documents.Open("pathtofile.docx");
var docClass = app.ActiveDocument as DocumentClass;
docClass.DocumentEvents2_Event_Close += DocClass_DocumentEvents2_Event_Close;
docClass.DocumentEvents_Event_Close += DocClass_DocumentEvents_Event_Close;
app.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(DocBeforeClose);
app.DocumentBeforeSave += new ApplicationEvents4_DocumentBeforeSaveEventHandler(DocBeforeSave);
}
private void DocClass_DocumentEvents2_Event_Close ()
{
MessageBox.Show("DocClass_DocumentEvents2_Event_Close");
AreControlsEnabled = true;
}
private void DocClass_DocumentEvents_Event_Close ()
{
MessageBox.Show("DocClass_DocumentEvents_Event_Close");
AreControlsEnabled = true;
}
private void DocBeforeClose (Document doc, ref bool cancel)
{
MessageBox.Show("DocBeforeClose");
AreControlsEnabled = true;
}
private void DocBeforeSave (Document doc, ref bool SaveAsUI, ref bool cancel)
{
MessageBox.Show("DocBeforeSave");
AreControlsEnabled = true;
}
}
,则此服务会知道您不需要的EggService
概念(BirdNest
)。
答案是birdNestId
。
答案 1 :(得分:0)
我认为它是BirdNestService
的一部分,因为Egg只是一个实体,并不依赖Nest。但是Nest包含鸡蛋,否则Nest没有鸡蛋就没有用。巢取决于鸡蛋,但鸡蛋并不取决于巢。我认为Nest必须掌握他所拥有的鸡蛋的信息,并且已经包含了您在课堂上所描述的鸡蛋清单,并且除非您有一个非常复杂的场景要查找,否则鸡蛋不需要记住它们的Nest ID。根据其卵或某些特定要求嵌套ID。
答案 2 :(得分:0)
BirdNestService
不需要像List<Egg> getEggs (int birdNestId);
这样的方法。
如果要从给定的燕窝中取卵,应该像这样简单:List<Egg> myEggs = myBirdNest.getEggs()
BirdNestService
应该具有您想在鸟巢上使用的操作(方法),例如BirdNest buildBirdNest(int amountStems, Bird byBird)
。
答案 3 :(得分:0)
我想应该是EggService。
原因是当前您的查询只需要Birds Nest的Eggs,但可能并非总是如此。明天您可能需要根据某些特征(例如大小,颜色等)来寻找鸡蛋。
因此,我会选择EggService,因为您毕竟要尝试识别具有特定特征的鸡蛋-在这种情况下,该鸡蛋属于某个鸟巢。
答案 4 :(得分:0)
列表getEggs(int birdNestId)方法要求包含在特定巢中的卵。我的想法:
因此,我希望在BirdNestService中使用List getEggs(int birdNestId)方法,并在EggService中添加如下方法: 列出getEggs(列出eggIds)。
但同样,没有正确或错误的答案。这取决于使您的设计干净,连贯和可维护的原因。
答案 5 :(得分:0)
您检索实体的属性,因此它是嵌套的一部分。没脑子
现在,如果您具有birdnestid属性,并通过该属性过滤了egg数据库,则它将成为egg实体的一部分,因此您将其放入egg服务中。
经验法则:没关系,只要它是属性即可。
这样,您可以在两种不同的服务中同时使用这两种方法。
这也适用于多层属性:取决于您用作基础的实体
您应该使用哪个?根据经验,请使用自上而下的方法:在需要孩子时始终选择父母