Чи добре у вашій заявці багато класів «Анотація»?


9

Спочатку ми хотіли реалізувати шаблон стратегії з різними реалізаціями методів у загальному інтерфейсі. Вони отримуватимуться під час виконання на основі даних користувачів.

Як виявилося, у нас є абстрактні класи, що реалізують 3 - 5 загальних методів і лише один метод залишився для різної реалізації, тобто Стратегії.

Оновлення: Під багатьма абстрактними класами я маю на увазі, що існує 6 різних функціональних можливостей високого рівня, тобто 6 пакетів, і кожен має свій інтерфейс + AbstractImpl + (серія Actual Impl).

Це погана конструкція?

Будь-які негативні погляди з точки зору подальшого розширення - я готуюсь до огляду коду / дизайну зі старшими.

Відповіді:


8

Ні, це аж ніяк не погана конструкція. Це шаблон методу шаблону .

Він призначений для інкапсулювання різної поведінки кроку алгоритму, що, мабуть, має місце у вашому сценарії. Стратегії та шаблонні методи шаблонів складають сильну комбінацію у багатьох випадках. Можливо, у вас є абстрактні стратегії як фрейм, а шаблон конкретного стратегії використання шаблону. Це досить чисто.

Це розширюється, а також вам не потрібно повторювати код. Коли вам потрібно щось зовсім інше, просто використовуйте інтерфейс стратегії, щоб створити нову абстрактну або конкретну стратегію.


4

Ні, це може бути цілком нормально (залежно від деталей - важко сказати більше з цим невеликим знанням про ваш конкретний випадок). Цілком чудово уніфікувати реалізацію загальних методів у абстрактному базовому класі.

Залежно від того, як використовується один абстрактний метод у ваших класах, цей шаблон може бути методом Шаблон, а не стратегією . А саме, якщо його називають яким-небудь іншим, остаточним методом в базовому класі, а не безпосередньо зовнішнім світом.


1

Шаблони методів шаблонів складають підклас для реалізації спеціального коду абстрактним методом, і підклас успадковує загальний метод від надкласу. Тому я не думаю, що у цьому є багато абстрактних класів, це лише один клас Анотація, весь підклас - це екземплярний клас.


0

Якщо абстрактні класи застосовують однакові методи, з однаковим змістом, то навіщо мати кілька абстрактних класів?

Якщо вони застосовують методи по-іншому, то я не бачу проблеми.

Щоб покращити розширюваність, використовуйте інтерфейси, то менше проблем, якщо потім перенести абстрактні класи

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.