Является ли использование следующего сродни использованию шаблона единицы работы

#nhibernate #fluent-nhibernate #unit-of-work

#nhibernate #свободно-nhibernate #единица работы

Вопрос:

Выполняет ли использование комбинации сеанса / транзакции nHiberbnate ту же функцию, что и шаблон единицы работы? ниже приведен некоторый код, найденный в Интернете..

 using (var session = sessionFactory.OpenSession())
  {
    using (var transaction = session.BeginTransaction())
    {
      // create a couple of Stores each with some Products and Employees
      var barginBasin = new Store { Name = "Bargin Basin" };
      var superMart = new Store { Name = "SuperMart" };

      var potatoes = new Product { Name = "Potatoes", Price = 3.60 };
      var fish = new Product { Name = "Fish", Price = 4.49 };
      var milk = new Product { Name = "Milk", Price = 0.79 };
      var bread = new Product { Name = "Bread", Price = 1.29 };
      var cheese = new Product { Name = "Cheese", Price = 2.10 };
      var waffles = new Product { Name = "Waffles", Price = 2.41 };

      var daisy = new Employee { FirstName = "Daisy", LastName = "Harrison" };
      var jack = new Employee { FirstName = "Jack", LastName = "Torrance" };
      var sue = new Employee { FirstName = "Sue", LastName = "Walkters" };
      var bill = new Employee { FirstName = "Bill", LastName = "Taft" };
      var joan = new Employee { FirstName = "Joan", LastName = "Pope" };

      // add products to the stores, there's some crossover in the products in each
      // store, because the store-product relationship is many-to-many
      AddProductsToStore(barginBasin, potatoes, fish, milk, bread, cheese);
      AddProductsToStore(superMart, bread, cheese, waffles);

      // add employees to the stores, this relationship is a one-to-many, so one
      // employee can only work at one store at a time
      AddEmployeesToStore(barginBasin, daisy, jack, sue);
      AddEmployeesToStore(superMart, bill, joan);

      // save both stores, this saves everything else via cascading
      session.SaveOrUpdate(barginBasin);
      session.SaveOrUpdate(superMart);

      transaction.Commit();
    }
  }
}
  

Ответ №1:

Мартин Фаулер:

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

Да, сеанс NH является примером единицы работы.

Комментарии:

1. Я соглашусь с определением Фаулерса

Ответ №2:

Не обязательно. unitofwork .Start() может содержать следующее

  1. Открыть сеанс
  2. Выполните некоторую инициализацию (например. добавьте фильтры)
  3. Начать транзакцию

unitofwork.end() может содержать следующее

1. Фиксация или откат транзакции 2. Завершение сеанса