Некоторые тексты, которые я читал относительно DDD, указывают на то, что служба приложений или команда (CQRS) на уровне приложений тесно отражает конкретный вариант использования.
Для простых случаев использования это отображение имеет смысл, нов более сложных случаях, когда требуется многократное взаимодействие с пользователем, я пытаюсь понять, как отобразить уровень API на уровне анализатора, не вставляя логику приложения в пользовательский интерфейс.
Пример: - Представьте себе службу приложений:
ImportProductData(date_source)
- С точки зрения System / UI, при импорте данных о продукте мы хотим проверить, существует ли какой-либо из продуктов, и, если это так, подсказать пользователю, хотят ли они продолжить или нет.перед тем, как продолжить.
Мой обычный подход: расширить API, включив в него:
DoesIncludeExistingProducts(data_source)
Если возвращается true, подскажите пользователю, хотят ли они продолжить, затем позвоните.
ImportProductData(date_source, overwrite=True)
Мой вопрос заключается в том, переносится ли это на большую часть логики приложения на уровень пользовательского интерфейса?(т.е. пользовательский интерфейс теперь контролирует, могут ли продукты быть перезаписаны, и нужно ли проверять существующие продукты перед импортом данных продукта и т. д.)?Помимо:
Вызов:
ImportProductData(date_source)
В случае сбоя проверьте причину сбоя, а если из-за того, что продукт уже существует, предложите пользователю и снова позвоните с:
ImportProductData(date_source, overwrite=True)
Это похоже на другой способ сделать то же самое, что и выше.
Это может показаться немного педантичным, но я пытаюсь предпринять согласованные усилия, чтобы сохранить уровень представления (MVC)настолько легкие и тонкие, насколько это возможно.
Мысли о более изящных решениях?