Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 创建只在构造函数期间执行代码的对象是否设计糟糕?_Oop - Fatal编程技术网

Oop 创建只在构造函数期间执行代码的对象是否设计糟糕?

Oop 创建只在构造函数期间执行代码的对象是否设计糟糕?,oop,Oop,在我的设计中,我使用评估数据记录的对象。使用数据记录和计算类型作为参数调用构造函数,然后构造函数调用计算记录所需的所有对象代码。这包括使用求值类型在文本文件中查找其他参数(如数据) 在250个独特的评估类型附近,使用相同或相似的代码和来自文本文件的独特参数 其中一些评估使用不同的代码,因此我从这个模型中受益匪浅,因为我可以使用继承和多态性 一旦对象被创建,就不需要在对象上执行额外的代码(至少现在是这样),它的使用更像一个结构;它保留在一个列表中,3个属性将在以后使用 我认为这种设计最容易理解、编

在我的设计中,我使用评估数据记录的对象。使用数据记录和计算类型作为参数调用构造函数,然后构造函数调用计算记录所需的所有对象代码。这包括使用求值类型在文本文件中查找其他参数(如数据)

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

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

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

我认为这种设计最容易理解、编码和阅读

我想一个合乎逻辑的替代方法是使用返回score结构的函数,但不能从方法继承,因此在imo中会有点草率

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


感谢您的输入,总的来说,在构造函数中放入有意义的代码不是一个好主意,因为当您子类化时,您最终会在严格的构造函数执行顺序上受到阻碍

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

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

简而言之,我将使用方法来实现主计算。如果您担心在不调用对象的求值方法的情况下创建对象,则可以使用工厂来创建对象,该工厂在构建后调用求值方法。通过方法的执行顺序灵活性,您可以获得构造函数的安全性。

一般来说,将在构造函数中执行任何重要操作的代码放在一个不太好的主意中,因为当您子类化时,您最终会在严格的构造函数执行顺序上受到限制

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

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


简而言之,我将使用方法来实现主计算。如果您担心在不调用对象的求值方法的情况下创建对象,则可以使用工厂来创建对象,该工厂在构建后调用求值方法。通过方法的执行顺序灵活性,您可以获得构造函数的安全性。

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

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

一些代码或伪代码可能会回答这个问题……这取决于语言,在JavaScript中,您可以只返回一个包含所需变量的对象。如果所有内容都在构造函数中,如何使用多态性?如果您将求值移动到(虚拟)方法,您将得到多态性。我不清楚在构造函数期间执行是什么意思。构造函数将读取文本文件,然后调用一个求值方法,该方法将为求值的各个部分调用方法。通过这种方式,可以覆盖整个计算过程,也可以覆盖单个段。一些代码或伪代码可能会回答这个问题……这取决于语言,在JavaScript中,您可以只返回一个包含所需变量的对象。如果所有内容都在构造函数中,如何使用多态性?如果您将求值移动到(虚拟)方法,您将得到多态性。我不清楚在构造函数期间执行是什么意思。构造函数将读取文本文件,然后调用一个求值方法,该方法将为求值的各个部分调用方法。通过这种方式,可以覆盖整个评估过程,也可以覆盖单个部分。我认为很遗憾,您链接到的文章的标题(!!!)中存在严重的拼写错误。@Jason-您知道任何好/更好的文章解释“告诉-不要问”的意思吗?没有提到内容的质量。只是,cmon,至少要正确拼写你的标题!我觉得很遗憾,你链接到的文章的标题(!!!)有一个严重的拼写错误。@Jason-你知道有什么好/更好的文章解释“告诉不要问”的意思吗?没有提到内容的质量。只是,cmon,至少要正确拼写你的标题!是的,我实际上所做的和你所说的模板方法非常相似