Здравствуйте, varenikAA, Вы писали:
AA>Код C#.
Вопрос-то в чем? Что ты подразумеваешь под корректностью?
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
Как развитие этого подхода — можно написать адаптер, превращающий обычный модуль в логированный модуль.
class LoggedModule implements IModule:
def constructor(module: IModule):
...
def start():
module.start()
log('start')
}