Позвольте мне объяснить это на примере. Предположим, что вы реализуете приложение, используя классический подход SQL. Вы открываете наборы записей, меняете данные и фиксируете их.
Псевдокод:
trx = connection.CreateTransaction();
query = connection.CreateQuery("Select * from Employee where id = empid");
resultset = query.Run();
resultset.SetValue("Address_Street", "Bahnhofstrasse");
resultset.SetValue("Address_City", "Zürich");
trx.Commit();
С NHibernate это будет выглядеть примерно так:
emp = session.Get<Employee>(empid);
// persistence ignorant 'logic'
emp.Address.Street = "Bahnhofstrasse";
emp.Address.City = "Zürich";
session.Commit();
Постоянство Невежество означает, что сама бизнес-логика не знает о постоянстве. Или, другими словами, постоянство отделено от логики. Это делает его намного более пригодным для повторного использования.
Переместить «логику» в метод многократного использования:
void MoveToZuerichBahnhofstrasse(Employee emp)
{
// doesn't have anything to do with persistence
emp.Address.Street = "Bahnhofstrasse";
emp.Address.City = "Zürich";
}
Попробуйте написать такой метод, используя наборы результатов, и вы знаете, что такое постоянное невежество.
Если вы не уверены, посмотрите, насколько простым будет модульный тест, потому что нет никаких зависимостей от вещей, связанных с постоянством:
Employee emp = new Employee();
MovingService.MoveToZuerichBahnhofstreasse(emp);
Assert.AreEqual("Bahnhofstrasse", emp.Address.Street);
Assert.AreEqual("Zürich", emp.Address.City);
DDD - это что-то другое. Там вы сначала строите модель своего домена (модель класса) и создаете дизайн базы данных в соответствии с ней. С NH это очень просто, потому что - благодаря постоянному невежеству - вы можете написать и выполнить модульное тестирование модели и логики, прежде чем иметь (окончательную) модель базы данных.
Тестирование. Мы тестируем сопоставления, создавая экземпляр объекта, сохраняя его в базе данных, возвращая его и сравнивая. Это делается автоматически с большим количеством размышлений. Но вам не нужно идти так далеко. большинство типичных ошибок появляются при попытке сохранить сущность.
Вы можете сделать то же самое с запросами. Сложные запросы заслуживают проверки. Это наиболее интересно, если запрос вообще скомпилирован. Вам даже не нужны никакие данные для этого.
Для тестов интеграции баз данных мы используем Sqlite . Это довольно быстро. NH создает базу данных в памяти на лету, используя SchemaExport (перед каждым тестом).