Должен ли объект Form обладать двойной ответственностью за отображение и обработку? - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть прототип с классом Form, который автоматически генерирует форму HTML, и теперь я подключаю некоторые функции обработки к прототипу.

Должен ли тот же класс Form, который генерирует HTML для формы, также обрабатывать форму? Это сделало бы у класса две разные, разные ... но связанные цели.

Должен ли это быть один класс или его следует разделить на два?

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Зависит от того, что вы подразумеваете под «обработать форму». Например, совершенно разумно создать класс, который имеет метод CreateChildForm () и другой метод ProcessChildForm (форма). Также разумно создавать формы, которые обрабатывают сами. например Form.Process () .

Другими словами, это зависит от того, что вы пытаетесь сделать.

1 голос
/ 11 февраля 2010

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

Однако, в вашем примере, вы, кажется, имеете три различных обязанности:

  1. Структурное представление формы, полное определения полей и т. Д.
  2. Процесс преобразования формы в HTML, который преобразует форму в представление HTML.
  3. Процесс отправки формы, который оценивает представленные данные и создает «заполненную» форму записи (которая может даже быть четвертой областью ответственности).

Конечно, возможно объединить любое количество этих обязанностей вместе - я думаю, вы обнаружите, что разделение может создавать ценность, в том числе:

  • Разделение реализаций
  • Точки расширения на будущее
  • Отделение представления данных от действий по обработке
...