Добавить / редактировать шаблон дизайна формы - PullRequest
0 голосов
/ 07 мая 2011

Рассмотрим список компаний, и мы можем добавить новую или отредактировать существующую. Добавление и редактирование выполняется с помощью формы.

Для визуализации этих форм мне нужны два класса: AddForm и EditForm. Но у них много общего (поля, кнопки и т. Д.), Поэтому я обобщаю класс Form:

class AddForm extends Form
class EditForm extends Form

Тогда мне нужно создать множество форм: для компаний, контактов, документов, пользователей и так далее. Поэтому я создаю библиотеку с тремя базовыми классами:

abstract class BaseForm
abstract class BaseAddForm extends BaseForm
abstract class BaseEditForm extends BaseForm

Сейчас я пытаюсь создать реализацию для компаний:

class CompanyForm extends BaseForm
class CompanyAddForm extends BaseAddForm, CompanyForm

OOPS! Множественное наследование не допускается.

Что мне делать?

ОБНОВЛЕНИЕ: я слышал, что необходимость множественного наследования означает плохой дизайн. Может кто-нибудь показать мне, как этот дизайн может быть переработан?

Ответы [ 2 ]

0 голосов
/ 08 мая 2011

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

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

Вы говорите: «Но у них много общего (поля, кнопки и т. Д.), Поэтому я обобщаю класс Form». Я ставлю под сомнение основание для обобщения здесь. Много полей и кнопок общего? Какие поля и кнопки, например, имеют общие формы DocumentEdit и CompanyEdit? Кнопка Изменить, что-нибудь еще?

Теперь, CompanyAdd и CompanyEdit, да, у них будет много общего. Это предполагает, что формы добавления и редактирования расширяют некоторую родительскую форму вместо этих абстрактных оснований добавления / редактирования. Просто избавьтесь от BaseFormAdd и BaseFormEdit. Какую общую функциональность вы действительно собираетесь иметь между примером, формой документа и формой компании? Похоже, что общая базовая форма «Добавить» или «Редактировать» добавляет мало пользы. Вы можете обойтись без этой линии наследования. С точки зрения множественного наследования, я сталкиваюсь только с ситуацией, в которой это было бы полезно, до такой степени, что я чувствую, что она действительно нужна мне очень редко

0 голосов
/ 07 мая 2011

Похоже, что композиция - это то, что вы хотите использовать.Форма имеет список FormPanels.

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