Вопрос-то в чем? Что ты подразумеваешь под корректностью?
AA>Имеем модульную архитектуру с базовой реализацией модуля(0 вариант(: AA>может так(1 вариант(: AA>или так(2 вариант(:
Как минимум есть еще вариант вообще без использования наследования.
interface IModule:
def start()
class Module implements IModule:
start()
fun main(modules: List[IModule]):
for m in modules:
m.start()
log('start')
См. template method vs strategy, inheritance vs aggregation
Как развитие этого подхода — можно написать адаптер, превращающий обычный модуль в логированный модуль.
Здравствуйте, Буравчик, Вы писали:
Б>Здравствуйте, varenikAA, Вы писали:
AA>>Код C#.
Б>Вопрос-то в чем? Что ты подразумеваешь под корректностью?
в оригинале, я могу вызвать базовый метод до, после или не вызывать вообще.
проблема в неопределенности поведения наследников.
Здравствуйте, varenikAA, Вы писали:
Б>>Вопрос-то в чем? Что ты подразумеваешь под корректностью? AA>в оригинале, я могу вызвать базовый метод до, после или не вызывать вообще. AA>проблема в неопределенности поведения наследников.
В варианте 2 эта проблема у тебя решена.
И он же — переходный вариант к устранению наследования вообще.
Осталось только выделить OnStart в отдельный интерфейс