Ответ 1
-
Для масштабируемости это позволяет отделить внутренний код от внешнего кода. Поэтому, если вы поместите код пользовательского интерфейса в проект MVC и как можно больше кода обработки в один или несколько отдельных проектов WCF и бизнес-логики, не только ваш код станет более четким, но вы также сможете масштабировать уровни/уровни независимо от каждого другие.
-
CQRS отлично подходит для сайтов с высоким трафиком. Я думаю, что CQRS, должным образом объединенный с хорошей базовой библиотекой для DDD, хорош даже для сайтов с низким трафиком, потому что это упрощает реализацию бизнес-логики. Разделение данных на оптимизированную по чтению модель и оптимизированную для записи модель имеет смысл с архитектурной точки зрения также потому, что она делает изменения более удобными (возможно, еще немного работы, но определенно легче вносить изменения, не нарушая что-то).
Однако, если оба действуют в одной и той же базе данных, я бы удостоверился, что прочитанная модель полностью состоит из представлений, чтобы вы могли модифицировать объекты по мере необходимости, не нарушая код чтения. Это имеет то преимущество, что вам нужно будет писать меньше кода, но ваша модель записи по-прежнему будет состоять из полноценной модели сущностей, а не только для хранилища событий.
ИЗМЕНИТЬ, чтобы ответить на дополнительные вопросы:
Что мне нравится делать, это использовать службу данных WCF для модели Read. Эта технология (специфичная для .NET 4.0) создает веб-службу OData (= REST + Atom с поддержкой LINQ) поверх модели данных, например Entity Framework EDMX.
Итак, я создаю модель Read в SQL Server (Views), а затем создаю из нее модель Entity Framework, а затем создаю службу данных WCF поверх этого в режиме только для чтения. Это звучит намного сложнее, чем это, это занимает всего несколько минут. Вам не нужно создавать еще одну модель, просто покажите EDMX как доступную только для чтения. См. Также http://msdn.microsoft.com/en-us/library/cc668794.aspx.
Служба команд - это просто односторонняя регулярная служба WCF, служба Read - это служба данных WCF, и ваше приложение MVC потребляет их обоих.