Как структурировать класс nhibernate в отдельном проекте - PullRequest
1 голос
/ 21 июня 2010

Я работаю над своим первым проектом NHibernate, и у меня есть следующие настройки / требования.

У меня есть 2 проекта xx.Data и xx.Business.В проекте Data, где находятся мои доменные классы, файлы сопоставления.Я занимаюсь созданием онлайн-приложения, в котором у меня есть таблица SQL, в которой хранится идентификатор, дата изменения и поле XML, в котором хранятся данные формы приложения.Это сопоставлено с классом домена EnrolmentApplication.

XML десериализуется в класс ApplicationForm, который в данный момент находится в проекте xx.Business.Бизнес-проект ссылается на проект Data.

Я начал с создания своего кода, создав новую ApplicationForm, сериализовавшую в xml, затем установив для свойства EnrolmentApplicaiton строку xml и сохранив, что, на мой взгляд, ужасный способчто-то делать.

Затем я подумал, что у меня должно быть свойство в классе EnrolmentApplication, которое имеет свойства get / set для сериализации / десериализации свойства xml для меня, однако мне бы пришлось либо переместить класс ApplicationFormв проект данных или создайте другой класс, который наследуется от EnrolmentApplication, т.е.

using xx.Data;
namespace xx.Business
{
public class EForm : EnrolmentApplication
{
    public EForm(Guid applicationID) : base(applicationID)
    {}
}
}

Моя проблема с этим заключается в загрузке EnrolmentApplication из базы данных.Я не хочу делать следующее:

EnrolmentApplication form = NHibernateSession.Linq<EnrolmentApplication>().SingleOrDefault(x => x.appID);
this.ApplicationXML = form.ApplicationXML;
this.DateModified = form.DatModified;
...

Я мог бы упростить это, переместив класс ApplicationForm в проект Data, но я бы хотел оставить их отдельно, так как бизнес-класс - это то, где правиладля формы заявления должно действительно проживать.

1 Ответ

0 голосов
/ 22 июня 2010

Зачем нужен класс EnrolmentApplication в проекте Data?

NHibernate предназначен для отображения вашего доменного уровня (с соответствующими бизнес-объектами) в вашу базу данных.

Итак, у вас должно быть два проекта:

  • Доменный проект - бизнес-объекты
  • Проект данных - сопоставление файлов и репозиториев

Ваш проект данных должен ссылаться на проект домена, а не наоборот.

После этого у вас может быть любой уровень обслуживания, прикладной уровень или уровень пользовательского интерфейса, который явно ссылается на проект домена и в какой-то момент запускает сопоставления проектов данных.

Еслиесли вы хотите, чтобы ваш класс ApplicationForm был сериализован в XML, я бы создал для этого IUserType (или универсальный IXmlSerializedUserType, или менее универсальный IApplicationFormUserType помогут).

После этого вы можете использовать ApplicationForm (в несериализованной форме) в качестве свойства вашего класса EnrolmentApplication, что означает, что тот факт, что он сериализован в XML, скрыт от уровня вашего приложения и относится только к уровню данных..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...