1 Отредактировано karpen (24.07.2016 12:49:42)

Тема: Расширение функционала путем наследования и инверсия управления

Для изменения и дополнения классов используется наследование, однако здесь его применить не удается. Если я создам наследника какого-то класса, то остальные классы системы об этом не узнают, и будут продолжать использовать оригинальный класс. Проблемы можно избежать, если методы будут манипулировать не конкретными классами, а интерфейсами, а объекты будут создаваться не по месту использования с указанием конкретного класса, а при помощи некого настраиваемого программного механизма, и можно будет указать, какой класс для реализации какого интерфейса использовать.
По ссылкам более детально о том, что я имею в виду:
https://ru.wikipedia.org/wiki/%D0%98%D0 … 0%B8%D1%8F
https://habrahabr.ru/post/132084/

Повысить оценку Понизить оценку

2

Re: Расширение функционала путем наследования и инверсия управления

DI (Dependency Injection) - довольно удобная вещь, но на статически расширяемых фреймворках. Где расширение происходит программистом, путем прописывания нового модуля вручную в конфиг и где полный набор модулей заранее известен разработчику, таким образом он всегда знает, кто перегружает тот или иной класс, опираясь на свой же конфиг.

Наша же архитектура - динамически расширяема. ReadyScript у всех пользователей работает с разным набором модулей, которые привносятся в систему в разном порядке. Иными словами вы в своем модуле никогда не будете знать кто сейчас перегрузил класс, который вы хотите использовать, модуль "a" или модуль "b", а может есть какой-то модуль "d", который это делает. Тем самым в динамических платформах - это способно внести определенный хаос в работу системы и в стабильность работы системы.

Вы можете ожидать, что установили свой модуль и перегрузили какой-то класс, а на самом деле Пользователь установил затем другой модуль, который тоже перегрузил этот же класс, в итоге вы будете обращаться к несуществующим методам.

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

Повысить оценку Понизить оценку