"Правильнее" было бы делать не:
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'и. К примеру.
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'и. К примеру.
Комментариев нет:
Отправить комментарий