2011-02-07 5 views
0

Я строю сайт, используя MVC2 и имеют структуру, как следует:Дизайн вопрос

Factory -> Domain.objects -> MVC2

Один завод содержит перечисление для LOGTYPE, в котором подробно действия, которые были применены к объекту. Домен запрашивает объект и поставляет его в модель MVC2, это передается в представление как IEnumerable Ilog, и представление выполняет итерацию над ним.

Моя проблема в том, что я хочу, чтобы представление создало ссылку на основе типа журнала, поэтому у меня есть оператор switch в представлении, которое создает эту функциональность. Оператор switch использует перечисление прямо в репозитории, но мне это кажется немного неправильным: выставляя репозиторий для представления.

Должен ли я инкапсулировать тип журнала в новый IList объектов в домене? Или это нормально, ссылаясь на это перечисление в репозитории.

Если ни одно из них не является идеальным, какое наилучшее решение?

Спасибо за любую помощь, которую я мог бы получить.

ответ

0

Лучшим решением было бы использовать модель представления. Модель представления - это класс, специально подобранный для нужд представления. Так вот типичный рабочий процесс для действия контроллера:

  1. запросы хранилище для извлечения некоторых доменные объектов
  2. Карты этих объектов домена к модели соответствующего вида (AutoMapper может помочь вам здесь)
  3. Пропустите модель представления к виду

Таким образом, в этом случае представление не знает ни одной из ваших моделей домена. Это вообще.

Теперь для вашего конкретного случая создания разных ссылок на основе значения перечисления я думаю, что запись ifs и переключателей в представлении делает в уродливом. Не находите? Так писать пользовательский HTML помощник, который будет генерировать правильную ссылку, основанную на модели представления было бы здорово, особенно когда ваш взгляд выглядит следующим образом:

<%= Html.MyLink() %> 
+0

Спасибо Дарин! Я думаю, что я не понимаю, для каких моделей взглядов. Я бы поместил некоторую логику в модель представления, которая обратилась к домену. Должен ли контроллер обращаться к домену и передавать эту информацию в конкретную модель просмотра, а затем возвращать любые результаты в домен? –

+0

@misterjingo, в то время как модель представления содержит логику представления, она не должна напрямую обращаться к домену. Это контроллер, который делает мост между доменом и моделью просмотра, используя слой отображения. Это также работает наоборот: вы получаете модель представления в качестве аргумента действия контроллера, контроллер сопоставляет эту модель представления с моделью и вызывает репозиторий, передающий модель. –

+0

Я вложил эти изменения в место, и он действительно прибрал мой код. У меня есть один последний вопрос. Я использую интерфейсы для передачи объектов. Например, мой домен вызовет репозиторий (скажем, пользователь) и получит объект IUser (спецификация IUser находится в repository.users.interface). Я считаю, что это нормально для домена, чтобы использовать это определение IUser. Не желая, чтобы мой контроллер или представление имели какие-либо знания IUser, я сопоставлял IUser с domainUser и передавал его контроллеру. Должно ли это отображение происходить в домене или в контроллере? –

0

Моя мысль в том, что это один из тех великих целей для ViewModel и включить эту информацию в viewmodel.

Смежные вопросы