班级建设技术

时间:2010-10-10 01:34:17

标签: c# architecture design-patterns

我希望得到一些关于人们对以下班级建设技术的看法的反馈。 如果我处于可以选择使用以下任何一种情况的情况:

  1. 在构造函数中完全初始化对象,
  2. 在创建实例后,通过它的公共属性初始化对象。
  3. [删除了blogspam]

3 个答案:

答案 0 :(得分:1)

尽可能(并且适当),创建处于可用状态的对象实例。 (所以第1号)

答案 1 :(得分:0)

我同意米奇的观点,但有时还会有更多。

工厂方法可以使您的代码更清晰,更易于使用和维护。在某些方面,他们不仅仅是美化的建设者,但他们确实给你额外的灵活性。

  • 可以为工厂方法指定与其使用情况相符的名称。
  • 来电者只需提供所需的参数。不可否认,你也可以为'普通'构造函数执行此操作,但是如果调用者具有适当的名称,他们应该使用给定的构造函数更清楚。
  • 将所有复杂代码移出构造函数会使代码更易于维护。
  • 使用一个完整的工厂(一个返回抽象类/接口的工厂)为您提供了具体类本身的抽象。

示例:

// Typlical constructor 
public Page(pageId, title, url, keywords, content, tags, lastModified, lastModifiedBy)
{
  // All values are set via the constructor.
  //...
}

工厂方法:

public static Page PageByID(pageId)
{
  // All properties are set internally here 
  //(directly or delegated as appropriate).
  //...
}


public static Page NewPage(title, url)
{
  // All properties not passed in are given 
  // appropriate default values.
  //...
}

public static Page Page404()
{
  // All properties are given 
  // appropriate default values.
  //...
}

答案 2 :(得分:0)

正如Mitch所说,通常你会通过构造函数创建一个对象,它至少会使它处于稳定状态。您可以稍后使用公共属性来设置对象的非关键属性。

然而,有时你真的没有选择。框架可能需要默认构造函数(不带参数)。在这种情况下,您需要以另一种方式使对象处于稳定状态。使用公共属性是可能的,但是很容易忘记某些东西。在这些情况下,我建议创建一个在创建对象后直接调用的Initialize(或类似)方法。然后,此方法可能需要您填写稳定状态所需的所有参数,这样您就不会忘记任何事情。不同之处在于,除非您保留在每个公共成员中签入的内部“isInitialized”状态,否则您无法强制调用此方法。

编辑:啊刚刚看到关于工厂的帖子。是的,当然,如果框架需要默认构造函数,您也可以返回工厂并调用方法。