在哪里放方法?

时间:2012-07-14 17:05:46

标签: .net methods

我的数据对象包含加载,保存,更新数据的方法。然后我有对象来更复杂地处理这些数据,为此他们需要从数据对象中精心设计数据。

所以我开始向数据对象添加方法,以回答操作对象需要知道的特定问题。操纵对象只有与操作或某些特征严格相关的方法,而数据对象的信息由它精心制作。操纵对象请求并且操纵对象响应。这就是我一开始想象的方式。然后我意识到它们也可以是操纵对象或扩展方法的方法。

我觉得数据对象开始有太多与特定功能相关的方法,而且还会有更多。由于这些特征主要由操纵对象管理,因此它们可以在它们之间移动和分布。问题是这些方法中的一些被不同的操纵对象使用,并且操纵对象足够的方法与操作特别相关。所以另一个选择是将它们作为静态扩展方法实现,并将它们放在执行此类工作的命名空间中(因此它们只能从工作区域中看到,但如果需要可以被其他对象调用)。

问题是在哪里放置方法:

  • 提供从数据对象信息(公共信息)详细阐述的信息,无需任何操作
  • 用于特定功能的一个或几个其他对象的特定用途(主要是操作,还有查询和演示)
  • (有些使用帮助器业务对象,有些只依赖于数据对象而不需要其他任何东西)

他们是否属于:

  • 数据对象
  • 操纵物品
  • 到业务名称空间中的静态助手类?

我认为答案很大程度上取决于我们谈论的方法,应用程序的设计等等。所以我理解具体建议可能很难给出,但我会很感激任何帮助我做出决定的提示在这个和其他情况下。

简而言之:

我应该问自己什么标准或问题,以便选择放置方法的位置?

1 个答案:

答案 0 :(得分:2)

根据我的个人经验,为每个对象(或类)设置一个职责/功能/特征等,效果非常好。

这就是我建议你的原因: 为您需要处理的每种类型的数据对象创建1个类。     示例:DataObjectA,DataObjectB 为需要对这些数据对象执行的每个操作创建1个类(或者每个对操作x数据对象类型可能是一个类,具体取决于它们的相似程度)。     示例:DataObjectLoader,DataObjectASaver,DataObjectAUpdater以及DataObjectALoader和DataObjectBLoader。 为每个更复杂的数据操作创建1个类:     示例:DataObjectAComplexThing

如果精心设计的数据要求复杂事物本身具有“意义”,并且这是您在域中识别的问题,并且您可以轻松命名,那么您也应该为此创建一个类:     示例:ObtainDataRequiredForComplexThing

DataObject应该只回答“定义”该对象究竟是什么所需的基本查询...所有其他内容应该是ObtainDataRequiredForComplexThing或DataObjectAComplexThing类型的calsses。

我决定把东西放在哪里的标准是...... Thins应该只有方法,字段等......这些都是严格需要的...任何你可以带走的东西,你应该拿走它并放在某个地方别的(在另一个班级,或任何[当然在理由之内])。 如果您可以使用单个类或使用多个类来解决问题,并且每个较小的类本身都具有“意义”,并且您可以识别域中的问题,并且可以为它们指定正确的名称...你应该使用多个较小的类...... 组合对象(或类)比分割它们更容易。所以,只要你有机会,你几乎总是把它们分成更小的构造块....

大多数人都说你应该为域中的每个名词创建对象(或类),并为域中的每个动词创建方法.... 根据我的经验,为每个名词和每个动词的对象创建对象更好。 示例:new SomeVerbThatRepresentsDoingSoething(aDataObject).ExecuteThisVerb(); //实施那个动词