В сфере DDD мне нравится идея избегать геттеров и сеттеров для полной инкапсуляции компонента, поэтому единственное разрешенное взаимодействие - это взаимодействие, построенное через поведение. Объединив это с поиском событий, я могу получить хорошую историю того, что было выполнено и когда с компонентом.
Одна вещь, о которой я думал, - это когда я хочу создать, например, спокойный шлюз к базовой службе. В качестве примера предположим, что у меня есть объект Task со следующими методами,
ChangeDueDate (DateTime date)
ChangeDescription (строковое описание)
AddTags (params string [] tags)
Complete ( )
Теперь очевидно, что у меня будут переменные экземпляра внутри этого объекта для управления состоянием и событиями, которые будут запускаться при вызове соответствующих методов.
Возвращаясь к службе REST, как я вижу, есть 3 варианта:
http://127.0.0.1/api/tasks/ {taskid} / changeduedate
http://127.0.0.1/api/tasks/ {taskid} / commands
ChangeDueDate
команда ChangeDescription
команда http://127.0.0.1/api/tasks/ {taskid}
Глядя на это сейчас, я чувствую, что второй вариант выглядит лучшим, но мне интересно, что думают об этом другие люди, если есть известный истинный успокаивающий способ справиться с этим видом проблемы. Со вторым вариантом я знаю, что это было бы действительно приятно с точки зрения TDD, а также с точки зрения производительности, поскольку я мог бы объединить изменения в поведении в один запрос, продолжая отслеживать изменения.
Первый вариант определенно будет явным, но приведет к более чем одному запросу, если нужно вызвать много вариантов поведения.
Третий вариант звучит неплохо, но я понимаю, что это потребует некоторых усилий, чтобы прийти с чистой реализацией, которая могла бы учитывать различные типы свойств, вложенность и т. Д.
Спасибо за вашу помощь в этом, правда сгибая голову из-за аналитического паралича. Хотел бы просто посоветовать, что, по мнению других, было бы лучшим из возможных вариантов, или я упускаю какой-то трюк.