Просмотр дизайна модели

#asp.net-mvc #viewmodel

#asp.net-mvc #viewmodel

Вопрос:

У меня есть страница создания и страница редактирования для объекта. Страницы похожи, поэтому у меня есть базовая модель представления, которая содержит общие поля между страницами, и модель представления для каждой страницы, которая наследуется от базовой.

Одно из различий между двумя страницами заключается в том, что на странице создания есть форма поиска, где пользователь может вводить критерии и выполнять поиск с помощью ajax-запроса. Поля критериев поиска не являются частью объекта. Я создал подмодель «SearchCriteria» со своими собственными свойствами для разных критериев поиска, чтобы я мог просто публиковать эту модель при выполнении поиска и, возможно, добавлять дополнительные критерии поиска в будущем без необходимости изменять параметры метода.

Оказывается, мне нужно добавить что-то еще, но это что-то еще является одним из свойств базовой модели представления. Я не уверен, как лучше всего это сделать. Я думаю, что мне придется считать, что свойство больше не является общим, и переместить его в мою модель редактирования представления и мою модель SearchCriteria, но тогда я потеряю свое общее сопоставление с объектом и должен буду повторить код.

Я думаю, что, возможно, я где-то ошибся, поэтому некоторые советы по дизайну будут оценены.

Спасибо

Ответ №1:

Я столкнулся с аналогичной проблемой. Во-первых, с функцией поиска. Вы можете создать SearchServiceController . Затем добавьте частичное представление и передайте ему модель, когда вы хотите отобразить панель поиска, в противном случае передайте null и ничего не отобразите. Таким образом, вы разделяете проблемы, сохраняя функциональность поиска в своем собственном процессе.

Что касается добавления свойства, которое не будет использоваться, я не чувствую, что это представляет большую проблему. Платформа .NET Framework заполнена подклассами, которые не реализуют части базы. Вместо этого вы можете создать исключение NotImplementedException . Для меня это стоит того, чтобы пойти на компромисс, чтобы добиться согласованности и СУХОСТИ.

Лично я обнаружил, что совместное использование viewmodels между контроллерами не очень хорошо (но в этом случае вы можете использовать один контроллер). Используя IoC с Ninject, я получаю множество ошибок циклической избыточности при привязке моих интерфейсов к одним и тем же viewmodels на контроллерах. По этой причине я убрал Ninject. Но, возможно, вы можете выполнить привязку на другом уровне…не пробовал.