четверг, 17 августа 2017 г.

Инверсия зависимостей

"Правильнее" было бы делать не:

If theForm.ShowModal ... then

А:

If TModalService.Execute(theForm) ... Then

Это и расширяется и тестируется гораздо гибче.

А вместо:

theMenu.Popup

Лучше:

TPopupService.Execute(theMenu)

или вместо:
theSaveDialog.Execute

Пишем:

TSaveDialogService.Execute(theSaveDialog)

А для сервисов можно сделать:

TModalService.Inject(TmyModalService.Instance)
TPopupService.Inject(TmyPopupService.Instance)
TSaveDialogService.Inject(TmySaveDialogService.Instance)

- иньекция реализации.

Подменяем реализацию сервиса. Например для тестирования.

"Клиенты" сервиса про такую "подмену" - даже не узнают.

Они будут "думать", что вызывают "оригинальный" сервис.

Это всё реализуется либо при генерации из UML либо при помощи Generic'ов.

И например для тестов не показываем диалоги/меню. А зовём mock'и. К примеру.

Комментариев нет:

Отправить комментарий