Это плохой дизайн для создания объектов, которые выполняют код только во время конструктора? - PullRequest
0 голосов
/ 25 мая 2010

В своем дизайне я использую объекты, которые оценивают запись данных. Конструктор вызывается с записью данных и типом оценки в качестве параметров, а затем конструктор вызывает весь код объекта, необходимый для оценки записи. Это включает использование типа оценки для поиска дополнительных данных, подобных параметрам, в текстовом файле.

В окрестностях 250 уникальных типов оценки, которые используют одинаковый или похожий код и уникальные параметры, поступающие из текстового файла.

В некоторых из этих оценок используется другой код, поэтому я очень выигрываю от этой модели, потому что могу использовать наследование и полиморфизм.

Как только объект создан, больше нет необходимости выполнять дополнительный код для объекта (по крайней мере, на данный момент), и он больше используется как структура; он хранится в списке, и 3 свойства используются позже.

Я думаю, что этот дизайн легче всего понять, кодировать и читать.

Я полагаю, что логичной альтернативой было бы использование функций, возвращающих структуры счета, но вы не можете наследовать от методов, поэтому это сделало бы его небрежным imo.

Я использую vb.net, и эти классы будут использоваться как в веб-приложении asp.net, так и в распределенном приложении.

спасибо за ваш вклад

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

Выполнение кода в конструкторе в порядке; но наличие только свойств без методов может быть нарушением принципа tell not ask : возможно, вместо этого эти свойства должны быть частными, а код, который использует («запрашивает») эти свойства, должен стать методом класс (который вы можете вызвать или «сказать»).

2 голосов
/ 25 мая 2010

В общем, помещать код, который делает что-либо существенное в конструкторе, не очень хорошая идея, потому что вы в конечном итоге получите затруднительный порядок исполнения жесткого конструктора при создании подкласса.

Конструкторы лучше всего использовать для приведения вашего объекта в согласованное состояние. «Настоящая» работа лучше всего обрабатывается методами экземпляра. Работая как метод, вы получаете:

  • отделение того, что вы хотите оценить, от того, когда вы хотите это оценить.
  • полиморфизм (при использовании виртуальных методов)
  • возможность разбить работу на логические части, реализуя каждую часть как конкретный шаблонный метод . Эти шаблонные методы могут быть переопределены в подклассах, что предусматривает «делай это в основном как мой суперкласс, но делай это немного по-другому».

Короче говоря, я бы использовал методы для реализации основных вычислений. Если вы обеспокоены тем, что объект будет создан без вызова метода оценки, вы можете использовать фабрику для создания объектов, которая вызывает метод оценки после создания. Вы получаете безопасность конструкторов с гибкостью методов порядка выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...