@Urukhayy

Как организовать множество абстрактных классов в переносимом фреймворке (библиотеке)?

Задача:
Требуется реализовывать несколько различных проектов, которые используют схожий функционал (логика, данные), за исключением некоторых расширений со стороны каждого проекта.
Одно из решений: вынести общий абстрактный функционал в библиотеку, и подключать её к каждому проекту.
Но по мере совмещения всё более новых проектов с этой библиотекой, становится ясно, что вынесенный ранее абстрактный функционал недостаточен и требует тонкой настройки.

Пример:
Есть 3 компании, у которых по разному организованы связи групп сотрудников, но есть общий функционал: увольнение, повышение. Выносим в абстрактный класс библиотеки основные функции. Но оказывается, что у компании №1 группы сотрудников должны быть выстроены по иерархии (один отдел вложен в другой), но компании №2 не нужна вложенность. Если вложенность сотрудников реализовывать в общем функционале, она в некоторых проектах вообще не будет использована. Можно сделать другой класс в библиотеке, который наследуется от основного функционала и расширяет его функционалом вложенности для групп сотрудников. Но а вдруг потребуется множество подобных расширений одного абстрактного класса? А если одно расширение исключает другое?
К тому же, если фреймворком (библиотекой) захотят воспользоваться люди из другой компании, у которых есть вложенность групп сотрудников, но нет функционала увольнения, то как быть тогда? Ведь в библиотеке уже реализованы абстрактные классы с функционалом увольнения.

Одна из сторон вопроса: Как можно реализовать удобную и широкую библиотеку, не зная деталей проектов, которые будут с ней работать, но зная их общую концепцию?
  • Вопрос задан
  • 285 просмотров
Пригласить эксперта
Ответы на вопрос 1
doniys_a
@doniys_a
Backend-разработчик (Php, node.js, python, ruby)
из того что я понял, у вас Фабрика и
Компоновщик

Для реализации удобной и широкой библиотеки в первую очередь необходимо продумать ее архитектурное представление и расширяемость.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы