Нет, вы можете сделать все это в одной модели. Задача модели представления заключается в том, чтобы хранить данные для представления и при необходимости преобразовывать эти данные, чтобы представление могло их использовать. Ничто не говорит о том, что модель представления должна содержать определенные типы информации, то есть не существует правил, в которых говорится, что «она может содержать только информацию о клиенте, а не информацию о заказе».
Сказав это, также нет причины, по которой модель представления не может использоваться несколькими различными представлениями (конечно, дайте им все разные экземпляры) - это показало бы, что у вас есть хорошее разделение проблем между вашими представлениями и моделью представления. Лично я кодирую свои модели представления, чтобы они не знали, что представление существует. Нет также причины, по которой представление должно использовать все, что предоставляет модель представления, хотя привязка CustomerView к CustomerOrderProductViewModel заходит слишком далеко.
Редактировать: позвольте мне объяснить этот последний абзац немного подробнее.
Example 1: i have a new V which shows customer information, and i have an existing VM which has customer info AND order info
Я бы неохотно использовал эту ВМ для этого V, потому что, несмотря на то, что у него есть информация о клиенте, которая мне нужна, у него слишком много информации - я использую ВМ вне контекста, для которого он изначально предназначен.
Example 2: i have a VM that contains full client info, like their postal and residential address, their phone numbers, their girlfriend's names*, and a bunch of other client type info. I have a V which shows the client's name, birthday, and maybe two other properties.
Я хотел бы рассмотреть возможность использования этой виртуальной машины для этого V, это иллюстрирует мою точку зрения о том, что V не должен показывать всю информацию, содержащуюся в виртуальной машине. Эта концепция становится более очевидной, когда вы изменяете V (например, выполняете некоторое обслуживание и изменяете пользовательский интерфейс представления, потому что кто-то решил, что он хочет удалить кучу полей, и теперь он хочет представить возраст клиента в виде изображения) - я все еще могу использовать ту же виртуальную машину и просто изменить V (я мог бы использовать ValueConverter, чтобы представить возраст как образ, избегая, таким образом, изменения виртуальной машины).
At what point would i stop using the current ClientViewModel, and write a new one that was more specific to the needs of the modified ClientView?
На этот вопрос нет однозначного ответа - это зависит от количества времени, которое у меня есть для выполнения изменений, количества времени, доступного для тестирования, и компромисса в сложности между использованием полноценного объекта Client для виртуальной машины и написание новой более простой версии объекта Client, при этом сохраняя старую версию.
*, это должна быть коллекция независимых объектов, включенных в объект client, но просто поработайте со мной, это выдуманный пример:)