ASP.NET MVC - единица работы против сессии - PullRequest
1 голос
/ 02 августа 2011

Здесь у нас есть несколько проектов, использующих ASP.Net MVC, jQuery, LinqToSql и StructureMap.

Предположим, у меня такая ситуация: Страница редактирования компании.На этой странице 2 вкладки: Сведения и Сотрудники.Детали - это просто данные компании, такие как имя, телефон и т. Д. На вкладке «Сотрудники» у меня есть сетка jquery для всех сотрудников компании.Эти сотрудники приходят из сеанса, потому что пользователь может редактировать сотрудника, удалять и т. Д., И все эти модификации будут установлены в одном сеансе.И пользователь может редактировать сотрудника столько раз, сколько ему нужно, добавлять нового сотрудника, удалять этого же нового сотрудника и т. Д.

В нижней части этой страницы у меня есть кнопки «Сохранить» и «Отмена».При нажатии кнопки «Сохранить» я получаю сотрудников из сеанса и сохраняю их в базу данных.Это своего рода работа.

Однажды некоторые коллеги сказали, что мы должны отказаться от использования Session и начать использовать Unit of Work.Итак, я начал читать некоторые статьи, блоги и т. Д. Об этом.

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

До сих пор я ничего не нашел в некоторых практических способах.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 02 августа 2011

На самом деле, UoW - это просто шаблон для сохранения данных, а не замена для сеанса.Сессия все еще будет использоваться, просто UoW будет отвечать за взаимодействие с сессией NHibernate.Типичная реализация UoW может выглядеть примерно так:

public ActionResult Edit(Employee model)
{
   using(IUnitOfWork uow = UnitOfWork.Start())
   {
       employeeRepository.Save(model);

       uow.Commit();
   }

   return Json("Success); 
}

Здесь вы явно отмечаете границу вашей транзакции, а не прохождение сеанса.Большой ресурс для реализации UoW для NHibernate можно найти здесь .

0 голосов
/ 03 августа 2011

Я думаю, что вы хотите, чтобы вы хотели шаблон типа фасада. Вы создаете интерфейс или базовый класс для получения и сохранения пользовательских данных. Затем вы создаете конкретный класс, который использует сеанс.

Когда вы хотите перейти на единицу работы или любой другой механизм, вы просто создаете новую конкретную реализацию и используете ее. Ваш код теперь не знает, где хранятся ваши данные.

Simon

...