3

我有带有加载、保存、更新数据的方法的数据对象。然后我有对象可以对这些数据进行更复杂的操作,为此,它们需要来自数据对象的详细数据。

所以我开始向数据对象添加方法来回答操作对象需要知道的特定问题。操作对象仅具有与操作或某些功能严格相关的方法,而数据对象的信息由它详细说明。操纵对象询问并且被操纵对象响应。我一开始就是这么想象的。然后我意识到它们也可以是操作对象的方法或扩展方法。

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

问题是在哪里放置以下方法:

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

他们应该属于:

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

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

简而言之:

为了选择将方法放在哪里,我应该问自己什么标准或什么问题?

4

1 回答 1

2

以我个人的经验,为每个对象(或类)放置一个单一的职责/功能/特性等效果非常好。

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

如果详细说明的数据需要完成复杂的事情,对我来说具有“意义”,并且这是您在领域中识别的问题,并且您可以轻松命名,您也应该为此创建一个类:示例:ObtainDataRequiredForComplexThing

DataObject 应该只回答“定义”该对象到底是什么所需的基本查询......所有额外的东西都应该在 ObtainDataRequiredForComplexThing 或 DataObjectAComplexThing 类型的类上。

我决定把东西放在哪里的标准是...... Thins 应该只有方法、字段等。这些都是绝对必要的......任何你可以拿走的东西,你应该把它拿走并放在其他地方(在另一个班级,或任何[当然是合理的])。如果您可以使用单个类或多个类来解决问题,并且这些较小的类中的每一个都有自己的“意义”,并且您可以识别领域中的问题,并且可以给它们一个合适的名称...您应该使用多个较小的类...组合对象(或类)比拆分它们要容易得多。所以只要你有机会,你几乎总是把它们分成更小的构建块......

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

于 2012-07-14T20:21:35.010 回答