Как разработать интерфейс для многократной локализации - PullRequest
0 голосов
/ 09 сентября 2009

Рассмотрим следующую упрощенную демонстрацию:

Класс X содержит класс Y. Класс Y имеет открытый метод, Y.doYStuff().

Как проектировать X интерфейс, который использует метод Y как есть?

Если кто-то добавляет открытый метод к X, который просто перенаправляет запрос к Y, это приводит к нежелательно раздутому интерфейсу X и зависимости кода X от кода Y. Этот подход ухудшается при многократном сдерживании.

Если использовать косвенный доступ, такой как X.Y.doYStuff(), он становится намного чище, но приводит к нарушению инкапсуляции X.

Итак, существует ли чистый и правильный дизайн, позволяющий использовать методы внутреннего класса вне класса-оболочки?

1 Ответ

1 голос
/ 09 сентября 2009

Кажется, что дизайн, который вы используете, немного отсталый.

Из вашего описания вы не особенно хотите иметь прямые методы Y в вашем X-интерфейсе, так почему бы не иметь, например, вторичный интерфейс Z. Таким образом, интерфейсы будут более конкретными, и вы сможете реализовать оба интерфейса на нужных вам объектах.

Это приводит к двум меньшим интерфейсам, но с большей гибкостью.

Кроме того, вы можете создать абстрактный класс Z, используя интерфейс X. Тогда вам просто нужно унаследовать Y от Z и сделать конструкцию base() или super(), чтобы получить необходимую вам функциональность.

Оба должны работать на вас.

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