2010-05-24 77 views
0

在我的设计中,我使用的是评估数据记录的对象。用数据记录和评估类型作为参数调用构造函数,然后构造函数调用评估记录所需的所有对象代码。这包括使用评估类型在文本文件中查找其他类似参数的数据。创建在构造函数中只执行代码的对象是否糟糕?

在附近有250个独特评估类型使用来自文本文件的相同或相似代码和独特参数。

其中一些评估使用不同的代码,所以我从这个模型中受益匪浅,因为我可以使用继承和多态。

一旦创建了对象,就不需要在对象上执行额外的代码(至少现在是这样),并且它更像结构体;它保留在列表中,以后使用3个属性。

我觉得这个设计最容易理解,代码和阅读。

一个合乎逻辑的选择我猜会使用返回分数结构的函数,但是你不能从方法继承,所以它会让它变得马虎。

我正在使用vb.net,这些类将用于asp.net web应用程序以及分布式应用程序中。

感谢您的输入

+1

某些代码或伪代码可能会使此问题可能需要回答...... – msw 2010-05-24 23:02:36

+0

它取决于语言,在JavaScript中,您可以使用所需的变量返回一个对象 – 2010-05-24 23:06:30

+0

如果所有内容都处于构造函数?如果将评估移至(虚拟)方法,您将获得多态性。 – mdma 2010-05-24 23:12:18

回答

2

在构造函数中执行代码是可以的;但只有没有方法的属性可能违反了tell don't ask原则:或许相反,那些属性应该是私有的,使用(“询问”)这些属性的代码应该成为类的方法(您可以调用或“告诉“)。

+0

我认为在链接到的文章的标题(!!!)中出现严重拼写错误是很可悲的。 – Jason 2010-05-25 00:56:45

+0

@Jason - 你知道有什么好的/更好的文章说明了“不要问”的含义吗? – ChrisW 2010-05-25 08:56:51

+0

没有对内容质量做任何说明。只是,cmon,至少拼写你的标题是正确的! – Jason 2010-05-25 16:28:46

2

一般情况下,把代码做任何事情显著的构造函数不是一个好主意,因为你最终会得到陷于瘫痪刚性构造函数执行顺序,当你继承。

构造函数最适用于使对象处于一致状态。实例方法最好处理“真实”工作。随着作为一种方法实施的工作,您将获得:

  • 将您想要评估的内容与您想评估的内容区分开来。
  • 多态性(如果使用虚拟方法)
  • 选项将工作分解为逻辑部分,将每个部分作为具体的​​执行。这些模板方法可以在子类中重写,它提供了“大致像我的超类一样执行,但是做的有点不同”。

总之,我会使用方法来实现主要计算。如果您担心没有调用评估方法就会创建对象,则可以使用工厂创建对象,然后在构造后调用评估方法。您可以获得构造函数的安全性,方法的执行顺序具有灵活性。

+0

是的,我实际上做的和你正在谈论的模板方法非常相似,我认为大多数实际评估都是在方法内部。谢谢 – Curtix 2010-05-25 15:59:21

相关问题