Re[24]: ...продолжение
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 24.05.07 08:04
Оценка:
Здравствуйте, WolfHound, Вы писали:

КЛ>>Мой ответ: Да, именно такой дизайн я не считаю удачным. Он, безусловно, имеет право на существование, как и всякая модель, но, к сожалению, приводит к серьезным проблемам при сопровождении.

WH>Интересно к каким?

Основных проблем две:

  1. Изменение, добавление или удаление отдельного атрибута приводит к реорганизации иерархии.
  2. Злоупотребление оператором преобразования типов (dynamic_cast в C++ или as в C#) и, как результат, нарушение LSP.

Более детально обо всех этих проблемах написано в одной из моих статей.

При использовании интерфейсов возникает еще и третья проблема — изменение прототипа одного из методов интерфейса или добавление метода в интерфейс неминуемо приводит к необходимости изменения во всех реализациях. Это, конечно, характерно для любого интерфейса (например, Win32 API или OpenGL). Но проблема проявляется довольно часто, когда интерфейс строится путем "фильтрации" — когда общие для всех классов свойства выносятся в базовые классы (интерфейсы). Т.е. когда анализируются атрибуты и сходные атрибуты группируются в базовые классы (или интерфейсы).

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

WH>Эти интерфейсы являются моделью метаданных.

Это-то мне понятно. Но я спрашивал немного о другом. На всякий случай, переформулирую вопросы:

  1. Какие обязанности существуют у этой иерархии (целиком)?
  2. Какие обязанности существуют у отдельного интерфейса или класса иерархии? У IElementBase, IPropertyBase, IElement, IAttachedElement, IProperty, IAttachedProperty и т.д.?

Из Вашиз ответов я понял, что обязанности таковы:

  1. Восстановление формы из сериализованного представления.
  2. Сериализация формы.
  3. Редактирование формы (?).
  4. Иное?
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.