我的数据对象包含加载,保存,更新数据的方法。然后我有对象来更复杂地处理这些数据,为此他们需要从数据对象中精心设计数据。
所以我开始向数据对象添加方法,以回答操作对象需要知道的特定问题。操纵对象只有与操作或某些特征严格相关的方法,而数据对象的信息由它精心制作。操纵对象请求并且操纵对象响应。这就是我一开始想象的方式。然后我意识到它们也可以是操纵对象或扩展方法的方法。
我觉得数据对象开始有太多与特定功能相关的方法,而且还会有更多。由于这些特征主要由操纵对象管理,因此它们可以在它们之间移动和分布。问题是这些方法中的一些被不同的操纵对象使用,并且操纵对象足够的方法与操作特别相关。所以另一个选择是将它们作为静态扩展方法实现,并将它们放在执行此类工作的命名空间中(因此它们只能从工作区域中看到,但如果需要可以被其他对象调用)。
问题是在哪里放置方法:
他们是否属于:
我认为答案很大程度上取决于我们谈论的方法,应用程序的设计等等。所以我理解具体建议可能很难给出,但我会很感激任何帮助我做出决定的提示在这个和其他情况下。
简而言之:
我应该问自己什么标准或问题,以便选择放置方法的位置?
答案 0 :(得分:2)
根据我的个人经验,为每个对象(或类)设置一个职责/功能/特征等,效果非常好。
这就是我建议你的原因: 为您需要处理的每种类型的数据对象创建1个类。 示例:DataObjectA,DataObjectB 为需要对这些数据对象执行的每个操作创建1个类(或者每个对操作x数据对象类型可能是一个类,具体取决于它们的相似程度)。 示例:DataObjectLoader,DataObjectASaver,DataObjectAUpdater以及DataObjectALoader和DataObjectBLoader。 为每个更复杂的数据操作创建1个类: 示例:DataObjectAComplexThing
如果精心设计的数据要求复杂事物本身具有“意义”,并且这是您在域中识别的问题,并且您可以轻松命名,那么您也应该为此创建一个类: 示例:ObtainDataRequiredForComplexThing
DataObject应该只回答“定义”该对象究竟是什么所需的基本查询...所有其他内容应该是ObtainDataRequiredForComplexThing或DataObjectAComplexThing类型的calsses。
我决定把东西放在哪里的标准是...... Thins应该只有方法,字段等......这些都是严格需要的...任何你可以带走的东西,你应该拿走它并放在某个地方别的(在另一个班级,或任何[当然在理由之内])。 如果您可以使用单个类或使用多个类来解决问题,并且每个较小的类本身都具有“意义”,并且您可以识别域中的问题,并且可以为它们指定正确的名称...你应该使用多个较小的类...... 组合对象(或类)比分割它们更容易。所以,只要你有机会,你几乎总是把它们分成更小的构造块....
大多数人都说你应该为域中的每个名词创建对象(或类),并为域中的每个动词创建方法.... 根据我的经验,为每个名词和每个动词的对象创建对象更好。 示例:new SomeVerbThatRepresentsDoingSoething(aDataObject).ExecuteThisVerb(); //实施那个动词