LINQ против модели презентации - PullRequest
1 голос
/ 12 октября 2009

Подставляет ли LINQ модель презентации?

Я читал в книге "ASP.NET MVC в действии" о моделях презентаций.

Интересно, зачем строить презентационную модель ?!

Например, проецирование объекта (сущности) домена путем создания нового класса во время выполнения через LINQ, на мой взгляд, более удобно, чем создание десятков объектов представления.

Так что ты думаешь? Может быть, кто-то из вас использует оба: o

Технологии, которые я бы предпочел, это ASP.NET MVC и NHibernate с LINQ или Entity Framework.

Ответы [ 4 ]

3 голосов
/ 12 октября 2009

Linq не заменяет презентационную модель . И не Linq to SQL, если это то, на что вы ссылаетесь (что, вероятно, и есть). Скорее Linq to SQL отображает таблицы базы данных в классы C # или VB, чтобы вы могли работать с данными непосредственно в своем коде.

Модель представления (или Модель представления в ASP.NET MVC) - это класс кода, который используется для отделения вашего представления от модели данных или бизнес-классов. Модель представления позволяет вам помещать в нее такие вещи, как проверка и просмотр логики, не мешая при этом вашему представлению.

Помните, что Domain-Driven-Design (DDD) по своей сути - это всего лишь метод создания общего словаря («вездесущего языка») между вами и вашим клиентом, чтобы сделать процесс проектирования более простым и точным .

Обязательно ознакомьтесь с руководством NerdDinner по адресу nerddinnerbook.s3.amazonaws.com / Intro.htm . Модели представления подробно обсуждаются в nerddinnerbook.s3.amazonaws.com / Part6.htm

1 голос
/ 14 октября 2009

Принцип единоличной ответственности .

С моделью презентации - вы отделяете свою модель от уровня презентации. Ваша модель домена больше не несет ответственности за перевод всего в строку, форматирование даты и т. Д.

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

1 голос
/ 13 октября 2009

Rookian, я имею в виду, что предоставление хранилищам желаемых свойств может служить моделью представления.

В вашем примере "CustomerRepository.GetAll().Select(x=>new {firstname = x.Firstname, lastname = x.Lastname}.ToList()" вы извлекаете все свойства из базы данных и преобразуете его с помощью Linq в Objects, что является проблемой, если проблема заключается в производительности.

Я сам не реализовал ничего подобного, но в настоящее время я использую Linq для NHibernate в своих репозиториях.

Я полагаю, что API может выглядеть следующим образом:

IRepository<TEntity>
{
   List<object> FindAll(params Func<TEntity, object>[] properties);
}

, где клиент использует API следующим образом:

var presentation = repository.FindAll(x => x.Firstname, x => x.Lastname);

... и реализация использует базу данных только для извлечения необходимых свойств.

0 голосов
/ 12 октября 2009

Когда я использую шаблон репозитория с шаблоном спецификации, зачем мне использовать презентацию модель

Каковы конкретные преимущества этой модели?

С помощью Linq я могу создавать новые объекты, которые соответствуют виду. Например, у меня есть объект Customer с идентификатором, именем, фамилией и адресом.

В представлении мне нужны только имя и фамилия. Поэтому я хотел бы создать репозиторий, который имеет метод с типом возврата IQuerable (или около того) и в контроллере я бы использовал что-то вроде этого: CustomerRepository.GetAll (). Select (x => new {firstname = x.Firstname, lastname = x.Lastname} .ToList (). И с помощью шаблона спецификации я также мог бы добавить некоторую логику для этого вызова, то есть с помощью выбора (где).

... так а для чего слой презентации: S?

...