C# 实体的更新应该由实体本身还是由服务类来处理?

C# 实体的更新应该由实体本身还是由服务类来处理?,c#,.net,C#,.net,请原谅这个标题,它比听起来简单 我有一门课,一本书。它包含一些贴纸,列表 当需要查看是否有任何标签等待添加时,StickerBook.CheckForNewStickers是否应该处理查找标签然后添加标签的逻辑,或者是一个新类NewStickerChecker是否应该检查标签然后将其添加到StickerBook 我知道这是一个非常基本的概念,但我不能完全理解它。好吧,这取决于你构造代码和对象建模的一般方法。也就是说,单一责任原则规定,对象应该只有一个存在的理由,因此我倾向于将NewSticker

请原谅这个标题,它比听起来简单

我有一门课,一本书。它包含一些贴纸,列表

当需要查看是否有任何标签等待添加时,StickerBook.CheckForNewStickers是否应该处理查找标签然后添加标签的逻辑,或者是一个新类NewStickerChecker是否应该检查标签然后将其添加到StickerBook


我知道这是一个非常基本的概念,但我不能完全理解它。

好吧,这取决于你构造代码和对象建模的一般方法。也就是说,单一责任原则规定,对象应该只有一个存在的理由,因此我倾向于将NewStickerChecker作为一个类。

没有黑与白,这可能是主观的,根据我的经验,如果存在一个包含子实体集合的实体,就像在您的案例中,书籍包含一个标签列表,您可以将它们加载到实体中

毕竟OOP定义类包含操作数据所需的数据和逻辑-


另外,正如免责声明,您所谈论的实体是商业实体的精神,而不是实体框架的光。。。这并不是说它会改变太多,只是因为问题的标签。

很确定这个问题没有正确或错误的答案。无论哪种方式,您似乎都在封装逻辑,而不是将类列表的内部内容向所有人开放,这通常是一件好事

将逻辑放入一个单独的服务类中,并让该类实现一个接口,如果您随后将该接口作为依赖项传递给其他代码段,则可以使单元测试更容易。我认为从概念上来说,在测试期间模拟一个服务类并传递实际的简单实体比模拟带有复杂逻辑的实体更容易