Каковы преимущества постоянного невежества?

+ имеет два применения. Одним из них является добавление, другое - конкатенация строк. Если одна или обе ваши переменные являются строкой, то + объединяет их.

Вам нужно будет использовать parseInt или parseFloat, чтобы превратить строку в число.

38
задан Stefan Steinegger 25 May 2009 в 09:55
поделиться

3 ответа

Let me explain this with an example. Lets assume your are implementing an application using a classical SQL approach. You open recordsets, change data and commit it.

Pseudo code:

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();

With NHibernate it would look something like this:

emp = session.Get<Employee>(empid);

// persistence ignorant 'logic'
emp.Address.Street = "Bahnhofstrasse";
emp.Address.City = "Zürich";

session.Commit();

Persistence Ignorance means that the business logic itself doesn't know about persistence. Or in other words, persistence is separated from logic. This makes it much more reusable.

Move 'logic' to a reusable method:

void MoveToZuerichBahnhofstrasse(Employee emp)
{
  // doesn't have anything to do with persistence
  emp.Address.Street = "Bahnhofstrasse";
  emp.Address.City = "Zürich";
}

Try to write such a method using resultsets and you know what persistence ignorance is.

If your are not convinced, see how simple a unit test would be, because there aren't any dependencies to persistence related stuff:

Employee emp = new Employee();
MovingService.MoveToZuerichBahnhofstreasse(emp);
Assert.AreEqual("Bahnhofstrasse", emp.Address.Street);
Assert.AreEqual("Zürich", emp.Address.City);

DDD is something different. There you build up your domain model first (class model) and create the database design according to it. With NH this is very simple, because - thanks to persistence ignorance - you can write and unit test the model and logic before having a (definitive) database model.


Testing: We are testing mappings by creating an instance of the entity, storing it to the database, getting it back and compare it. This is done automatically with lots of reflection. But you don't need to go so far. most of the typical errors show up when trying to store an entity.

You could do the same with queries. Complex queries deserve a test. It's most interesting if the query gets compiled at all. You don't even need any data for this.

For database integration tests, we are using Sqlite. This is pretty fast. NH produces the in-memory database on the fly using SchemaExport (before each test).

49
ответ дан 27 November 2019 в 03:44
поделиться

Я всегда думал о домене, и хотя в прошлом я использовал хранимые процедуры, ADO.NET, только когда я наконец перешел на NHibernate, я остался доволен своим механизм персистентности.

Domain Driven Design (DDD) делает упор прямо на модели предметной области. Это означает, что основное внимание уделяется созданию концептуальной модели, которая формирует общий язык как для пользователей, так и для программистов. Пользователи почти НИКОГДА не интересуются тем, как вы сохраняете их информацию. NHibernate помогает вам достичь этого образа мышления, делая упорство второстепенным по сравнению с фиксацией бизнес-правил и пониманием того, что на самом деле пользователь хочет от системы.

Fluent NHibernate снижает влияние, которое изменения в модели предметной области оказывают на лежащие в основе файлы сопоставления. Он также имеет автоматическое отображение . Хотя вы никогда не сможете полностью игнорировать постоянство вашей системы, NHibernate с Fluent NHibernate позволяет вам сосредоточиться на модели предметной области. Если вы не сосредотачиваетесь на использовании богатой модели домена, NHibernate мало что дает.

Что касается тестирования ваших сопоставлений, вы должны писать тесты (или вам СЛЕДУЕТ), независимо от того, какой метод вы используете для реализации устойчивости. . Это не лишняя работа, которая возникает только потому, что вы используете NHibernate. Просто подумайте о тестировании ваших сопоставлений как о проверке того, что ваше постоянство работает правильно.

Опять же, для этого Fluent NHibernate бесценен. У него есть Тестирование спецификации устойчивости , которое действительно просто использовать в большинстве случаев.

Хотя вы никогда не сможете полностью игнорировать постоянство вашей системы, NHibernate с Fluent NHibernate позволяет вам сосредоточиться на модели предметной области. Если вы не сосредотачиваетесь на использовании богатой модели домена, NHibernate мало что дает.

Что касается тестирования ваших сопоставлений, вы должны писать тесты (или вам СЛЕДУЕТ), независимо от того, какой метод вы используете для реализации устойчивости. . Это не лишняя работа, которая возникает только потому, что вы используете NHibernate. Просто подумайте о тестировании ваших сопоставлений как о проверке того, что ваше постоянство работает правильно.

Опять же, для этого Fluent NHibernate бесценен. У него есть Тестирование спецификации устойчивости , которое действительно просто использовать в большинстве случаев.

Хотя вы никогда не сможете полностью игнорировать постоянство вашей системы, NHibernate с Fluent NHibernate позволяет вам сосредоточиться на модели предметной области. Если вы не сосредотачиваетесь на использовании расширенной модели домена, от NHibernate мало пользы.

Что касается тестирования ваших сопоставлений, вы должны писать тесты (или вам СЛЕДУЕТ), независимо от того, какой метод вы используете для реализации устойчивости. . Это не лишняя работа, которая возникает только потому, что вы используете NHibernate. Просто подумайте о тестировании ваших сопоставлений как о проверке того, что ваше постоянство работает правильно.

Опять же, для этого Fluent NHibernate бесценен. У него есть Тестирование спецификации устойчивости , которое действительно просто использовать в большинстве случаев.

Если вы не сосредотачиваетесь на использовании богатой модели домена, от NHibernate мало пользы.

Что касается тестирования ваших сопоставлений, вы должны писать тесты (или ДОЛЖНЫ писать), независимо от того, какой метод вы используете для реализации постоянства. Это не лишняя работа, которая возникает только потому, что вы используете NHibernate. Просто подумайте о тестировании ваших сопоставлений как о проверке того, что ваше постоянство работает правильно.

Опять же, для этого Fluent NHibernate бесценен. У него есть Тестирование спецификации устойчивости , которое действительно просто использовать в большинстве случаев.

Если вы не сосредотачиваетесь на использовании богатой модели домена, от NHibernate мало пользы.

Что касается тестирования ваших сопоставлений, вы должны писать тесты (или ДОЛЖНЫ писать), независимо от того, какой метод вы используете для реализации постоянства. Это не лишняя работа, которая возникает только потому, что вы используете NHibernate. Просто подумайте о тестировании ваших сопоставлений как о проверке того, что ваше постоянство работает правильно.

Опять же, для этого Fluent NHibernate бесценен. У него есть Тестирование спецификации устойчивости , которое действительно просто использовать в большинстве случаев.

t дополнительная работа, которая появляется только потому, что вы используете NHibernate. Просто подумайте о тестировании ваших сопоставлений как о проверке того, что ваше постоянство работает правильно.

Опять же, для этого Fluent NHibernate бесценен. У него есть Тестирование спецификации устойчивости , которое действительно просто использовать в большинстве случаев.

t дополнительная работа, которая появляется только потому, что вы используете NHibernate. Просто подумайте о тестировании ваших сопоставлений как о проверке того, что ваше постоянство работает правильно.

Опять же, для этого Fluent NHibernate бесценен. У него есть Тестирование спецификации устойчивости , которое действительно просто использовать в большинстве случаев.

7
ответ дан 27 November 2019 в 03:44
поделиться

PI не использует NHibernate. PI означает игнорирование того, как данные будут храниться при разработке модели предметной области. И да, он усиливает зависимость, добавляя еще один уровень абстракции. DDD не является революционным - это скорее идея, подход к кодированию с использованием уже знакомых шаблонов (большинство из них таковыми). Т.е. - заводской шаблон или шаблон модуля тоже не новость, но довольно важная часть DDD.

Я тоже начал использовать NHibernate совсем недавно, поэтому не могу подробно рассказать об этом. Но у меня есть один совет, который может быть вам полезен - попробуйте Fluent NHibernate , если вы еще этого не сделали.

2
ответ дан 27 November 2019 в 03:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: