Я планирую свою первую N-уровневую архитектуру и натолкнулся на этот вопрос, как раз когда собирался опубликовать аналогичную. Весь пример кода, который я видел до сих пор, каждый раз проходит весь объектный граф по проводам, независимо от того, какие изменения действительно были сделаны. Я решил вместо этого принять подход, описанный выше. Хотя, похоже, это менее пройденная дорога.
Мне нравится идея передавать только дельты для каждого измененного свойства. Для свойств коллекции это будет то, что было добавлено и удалено. Для однозначного свойства это может быть просто новое значение. Я мог бы реализовать это в общем виде, чтобы накопление этих дельт было прозрачным для всех объектов домена. И дельты будут отправляться по сети в общем виде, без использования классов DTO, специфичных для моей модели предметной области.
Это заставило меня задуматься, не смогу ли я развить эту идею, используя ту же структуру разностных данных общего назначения для связи в направлении сервера к клиенту. В конце концов, вы могли бы иметь дельту, которая в основном заполняет пустой объект. Тогда я мог бы полностью устранить жестко закодированные классы DTO. Я гуглил "общие DTO" (без кавычек) и нашел это и это . Похоже, другие уже применили эту идею на практике.