Re[3]: Вопрос по дизайну
От: okman Беларусь https://searchinform.ru/
Дата: 25.07.11 07:14
Оценка:
Здравствуйте, l33thaxor, Вы писали:

L>Поэтому и спрашиваю про альтернативы.


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

O>>В COM (Windows) этот вопрос решили следующим образом — все классы наследуются от

O>>абстрактного IUnknown, который имеет метод QueryInterface для запроса интерфейсов.

L>Не вижу принципиальной разницы между QueryInterface и dynamic_cast применительно для данной задачи.


QueryInterface маскирует получение целевого объекта — это может быть указатель this,
либо копия всего объекта, либо вообще какой-нибудь прокси. И время его жизни контролируется
подсчетом ссылок, что в некоторых ситуациях может устранить путаницу.
А RTTI связан с накладными расходами на ровном месте и вообще плохо переносим.

L>>>Есть ли другие варианты?


O>>Такой, к примеру:

O>>...

L>Это, конечно, фигня, а не вариант. SomeFunction не может сама создать объекты классов реализующих эти интерфейсы, потому как она не знает, какие классы их реализуют, и как их создавать.


Это лишь сильно упрощенный пример. Классы могут создаваться фабриками, заворачиваться во
всякие обертки для обеспечения совместимости интерфейса, и так далее.
Хотя плохой дизайн это все равно не спасет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.