Я только начал читать об использовании репозитория и единиц работы.В настоящее время я пытаюсь использовать его с Entity Framework в приложении веб-форм asp.net.У меня, однако, есть вопрос, который я не уверен, смогу ли я объяснить простым способом.
Из того, что я понимаю, единица работы используется для инкапсуляции бизнес-транзакции.Из примеров, которые я видел, uow используется следующим образом:
businessMethod1()
{
uow u = new uow(); //instantiate unit of work
repository1 rep1 = new repository1(uow); //instantiate repository1
repository2 rep2 = new repository2(uow); //instantiate repository1
rep1.dowork();
rep2.dowork();
u.save(); //save the changes made to the database. (effectively saving changes made
//in both repository classes
}
Теперь предположим, что у меня есть businessMethod2()
, который похож на метод, описанный выше.Предположим, я хочу использовать businessMethod1()
изнутри businessMethod2()
, что было бы наилучшей практикой.Я хотел бы поделиться единицей работы, поэтому я должен передать ее в качестве аргумента?т.е. измените метод, упомянутый выше, на
businessMethod1(uow u)
{
bool isNew = false;
if (u == null)
{
u = new uow();
isNew = true;
}
repository1 rep1 = new repository1(uow); //instantiate repository1
repository2 rep2 = new repository2(uow); //instantiate repository1
rep1.dowork();
rep2.dowork();
if (isNew)
u.save(); //save the changes made to the database.
}
Это правильный способ работы с этим?
Я думал, что лучше было бы использовать синглтон-ов.На каждом запросе страницы создается новый экземпляр uow, который используется всеми бизнес-методами.По новому запросу создается другой экземпляр.Использование синглтона означает, что мне не придется передавать его ни одному из моих бизнес-методов, и в то же время я могу поделиться им со всеми моими бизнес-методами.
Есть ли какие-либо недостатки в этом?И есть ли лучший способ реализовать это?