Что меня больше напрягает, так это то, что примеры сводятся к тому, как красиво, легко и просто можно сменить имя. Имя, Карл. Я такие свойства даже в domain model не размещаю, они обычно только в read model, которая получает изменения через события.
Я для истории ещё один пример приведу, с моей точки зрения очень показательный. Если кому-то доводилось реализовать на стороне сервера подписки AppStore, то они надолго запомнят этот ад с километровыми списками транзакций, тонной свойств и отсутствием каких-нибудь признаков действий: всё сводится к тому, что разработчики сами должны понимать, что же произошло. Клиент тут тоже никак не мог помочь, поскольку Apple приложениям тоже по сути ничего не сообщает, просто — вот тебе зашифрованный receipt, иди отправляй на сервер, они там как-нибудь разберутся. Вдобавок к этому, там прыгающие айдишники транзакций (справедливости ради, они вроде как незадокументированы, но зачем они вообще там присутствуют, если они могут
меняться?) и отсутствие чёткого разделения разовых покупок и действий с подписками: по сути всё в одной большой куче. Нам пришлось потратить прилично времени, чтобы делать anti-corruption layer, который конвертировал этот abomination в чёткий список действий, который произошёл с подписками пользователя: старт новой подписки, продление, смена плана, продление периода отсрочки (когда подписка по факту закончилась, но Apple не оставляет надежд, что вот-вот пользователь пополнит свою карту и не закрывает подписку). Стало нереально проще понимать, что именно происходит, на полученный список событий мы навесили логгирование, оказание услуг, статистику и т.д.
И вот этим летом Apple всё-таки одумались и сделали серьёзный шаг вперед:
server-to-server уведомления, которые содержат предельно чёткое название события, которое произошло с подписками: старт, отмена (этого вообще не было), автоматическое продление, «ручное» продление, ...:
INITIAL_BUY, CANCEL, RENEWAL, INTERACTIVE_RENEWAL, ... И подключение этого уже после проделанной работы оказалось по сути бесплатным, поскольку у нас были ровно такие же команды, оставалось только каждому notification_type сопоставить соответствующее действие нашей модели. И понимать такой API стало на порядке проще, потому что в случае с огромным receipt мы занимались реверс-инжинирингом, чтобы понять что в принципе может происходить.
Мораль такова, что если в проекте есть логика, то нужно искать глаголы, точно отражающие процессы в системе, это помогает всем вовлечённым в проект: и клиенту, и серверу и даже менеджерам. Становится просто легче держать в голове логику, понимать разницу между кажущимися одинаковыми (с точки зрения CRUD-одержимых) действиями. А если ваши проекты состоят из сплошных обновлений профиля пользователя, то установите клиенту Joomla и не трахайте никому мозги, вы просто занимаетесь интерфейсами к базам данных, а для этого уже давно придумали удобные инструменты.