Разделение вовсе не является кошмаром, потому что, используя MVVM в качестве шаблона проектирования, я очень поддерживаю его использование. Недавно я был частью команды, в которой я написал компонент пользовательского интерфейса довольно крупного продукта, использующего MVVM, который взаимодействовал с серверным приложением, которое обрабатывало все вызовы базы данных и т. Д., И могу честно сказать, что это был один из лучших проектов, над которыми я работал.
Этот проект был
- Модель данных (базовые классы без поддержки InotifyPropertyChanged),
- Модель представления (поддерживает INPC, вся бизнес-логика для связанного представления),
- Просмотр (только XAML),
- Модель передачи (Методы только для вызова базы данных)
Я классифицировал модель Transfer как одну вещь, но на самом деле она была построена в несколько слоев.
У меня также была серия классов ViewModel, которые были обертками вокруг классов Model, чтобы либо добавить дополнительную функциональность, либо изменить способ представления данных. Все они поддерживали INPC и были теми, к которым привязан мой пользовательский интерфейс.
Я нашел подход MVVM очень полезным и, честно говоря, он сохранял код простым, у каждого представления была соответствующая модель представления, которая обрабатывает бизнес-логику для этого представления, а затем были различные базовые классы, которые будут считаться моделью.
Я думаю, что, отделяя код, подобный этому, он облегчает понимание, каждая модель представления не рискует быть загроможденной, потому что она содержит только вещи, связанные с ее представлением, и все, что у нас было общего между моделями представления, было обработано. по наследству вырубить повторный код.
Преимущество этого, конечно, заключается в том, что код становится мгновенно более удобным для обслуживания, потому что обращения к базе данных обрабатывались в моем приложении вызовом службы, это означало, что работа метода службы может быть изменена, если поскольку возвращаемые данные и требуемые параметры остаются прежними, пользовательский интерфейс никогда не должен знать об этом. То же самое относится и к пользовательскому интерфейсу: наличие пользовательского интерфейса без кода означает, что пользовательский интерфейс можно легко настроить.
Недостатком является то, что, к сожалению, некоторые вещи, которые вы просто должны делать в коде по какой-либо причине, если вы действительно не хотите придерживаться MVVM и придумываете какое-то слишком сложное решение, так что в некоторых ситуациях может быть трудно или невозможно придерживаться истинного Внедрение MVVM (в нашей компании мы не думали об этом).
В заключение, я думаю, что если вы правильно используете наследование, придерживаетесь шаблона проектирования и применяете стандарты кодирования, этот подход работает очень хорошо, если вы начинаете отклоняться, однако все начинает запутываться.