asp.mvc дизайн модели - PullRequest
       2

asp.mvc дизайн модели

2 голосов
/ 04 января 2011

Я довольно новичок в MVC и ищу способ проектирования своих моделей.

У меня есть проект веб-сайта MVC и другая библиотека классов, которая заботится о доступе к данным и конструировании бизнес-объектов.

Если у меня в этой сборке есть класс с именем Project, который является бизнес-объектом, и мне нужно отобразить все проекты в виде ... я должен создать другой класс модели Project?В этом случае классы будут идентичны.Получу ли я что-то от нового класса моделей?Мне не нравится иметь в представлениях ссылки на объекты из другой библиотеки DLL ... но я также не люблю дублировать код.

Сталкивались ли вы с той же проблемой?

Ответы [ 4 ]

3 голосов
/ 05 января 2011

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

// the class from the data store
public class MyDataObject {
    public string Property1 {get;set;}
    public string Property2 {get;set;}
    }

// model class in the MVC Models folder
public class MyDataObjectModel {
    public MyDataObject MyDataObject {get;set;}
    // list of values to populate a dropdown for Property2
    public List<string> Property2Values {get;set;}
    // related value fetched from a different data store
    public string Property3 {get;set;}
    }

. У меня также есть довольно много классов моделей, представляющих собой просто набор полей формы - в основном соответствующих параметрам действия из определенной формы, а не чему-либо, чтона самом деле попадает в базу данных.

2 голосов
/ 04 января 2011

Если это точно такой же проект, то, очевидно, не нужно дублировать класс Project, просто используйте его как есть в представлении. Но в реальной жизни представления часто предъявляют особые требования, поэтому рекомендуется определять классы моделей представлений в приложении MVC. Затем контроллер отобразит между классом модели и моделью представления, которые будут переданы в представление.

1 голос
/ 04 января 2011

Это зависит от того, что вы подразумеваете под моделью. В архитектуре, которую я обычно использую, у меня есть модель Domain, представляющая собой набор классов в отдельной библиотеке классов. Я использую DataAnnotations и встроенную проверку для автоматической проверки моей модели при сохранении.

Затем есть модель View, которую я размещаю в своем проекте MVC. Модели представлений имеют только информацию, относящуюся к представлению. Я также использую аннотации данных здесь, так как MVC автоматически использует их для моей проверки.

Причиной такого разделения модели является то, что вы не всегда используете каждый элемент вашей доменной модели в представлении. Это означает, что вам нужно либо перестроить данные на сервере, либо хранить их в скрытых полях. Мне тоже не нравится.

1 голос
/ 04 января 2011

Вы, вероятно, найдете разные мнения по этому поводу.Я дам вам мое:

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

Если вам нужна большая часть / вся информация в бизнес-объекте и требуются дополнительные данные, то я бы создал представление, которое содержит ссылку набизнес-объект, а также имеет свойства для дополнительных необходимых вам точек данных.

Одно из преимуществ повторного использования бизнес-объекта заключается в том, что в зависимости от используемой технологии доступа к данным вы можете получить повторное использование из проверки.Для isntance хорошо подходит ASP.NET MVC 3 в сочетании с Entity Framework, поскольку они оба используют атрибуты в пространстве имен System.ComponentModel для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...