Шаблон репозитория MVC: создание классов моделей - PullRequest
4 голосов
/ 10 января 2009

Просмотр витрины магазина Conery, и я не понимаю, почему он использовал автоматически сгенерированные классы Linqs (т. Е. Класс Order), а затем он определил другой класс Order, который не является частичным классом. При использовании шаблона хранилища следует вручную создавать классы и вообще игнорировать Datacontext?

Ответы [ 3 ]

3 голосов
/ 10 января 2009

Роб ответил на этот вопрос в одном из своих шоу.

Он использует классы POCO, чтобы быть в курсе всех классов доступа к данным. Например, когда он меняет LINQ-to-SQL на NHibernate, все, что ему нужно будет сделать, это изменить его «отображения» в его фильтрах, и ему не придется вносить какие-либо изменения в бизнес-логику.

3 голосов
/ 08 марта 2009

Если вы не отделяете свой интерфейс от классов linq с помощью промежуточного класса, вы не можете управлять с помощью контекста данных, собирающего мусор. Обычно с типами контекста данных экземпляры вы хотите избавиться от них, как только вы закончите с их использованием. Вот как вы можете сделать это в контексте linq to sql:

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    return thing;
}
... the MyDataContext instance is gone

С блоком «using» вы избавляетесь от экземпляра MYDataContext в последнем «}». Однако, если вы сделаете это, вы получите ошибку, тогда попытаетесь использовать «вещь», потому что экземпляр контекста данных пропал. Если вы не избавляетесь от контекста данных, он остается без дела, пока в конце концов не соберет мусор.

Если вы введете промежуточный класс для отделения кода linq to sql от вызывающего приложения, вы все равно сможете избавиться от своего экземпляра контекста данных и вернуть те же данные (просто в другом объекте):

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    SometThingElse otherThing = ConvertSomethingToSomethingElse(thing);
    return otherThing;
}
... the MyDataContext instance is gone

Надеюсь, это поможет.

2 голосов
/ 10 января 2009

В одном из своих недавних видео он сказал, что ему не нравится способ сопоставления LINQ to SQL. Я согласен, хотя я думаю, что это полное излишество.

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

...