DDD - Отображение объектов-значений с помощью Fluent nHibernate в отдельных таблицах - PullRequest
0 голосов
/ 10 марта 2011

РЕДАКТИРОВАТЬ:

Здравствуйте, попытка редактирования, чтобы получить ответ на этот вопрос.Чтобы попытаться улучшить вопрос, приведем сжатую версию:

Можно ли использовать приведенный ниже код при отображении объектов-значений в отдельные таблицы, используя свободный nhibernate, или есть альтернатива?

Привет,

Для целей этого вопроса я использую свободно сконфигурированный nhibernate.

Я постоянно изучаю DDD, но после некоторого разъяснения с отображением объектов-значений.Кажется, есть много информации относительно отображения объектов значения как компонентов.Однако в некоторых случаях я хотел бы нормализовать свою базу данных, поэтому придаю объекту значения постоянный идентификатор (который, если я прав, не нарушает правила объекта значения DDD).

Я видел это вопрос о SO, но хотелось бы немного больше информации о том, как настроить и отобразить объект фактического значения.

Мне удобно при отображении объекта значения в таблицу, которая представляет сущность.Например, отображение объекта значения адреса в таблицу клиентов в качестве компонента.

Мой запрос заключается в отображении объекта значения, который я хочу поместить в отдельную таблицу.Это лучший способ сопоставить объект значения с использованием classmap, как показано ниже?Я планирую проигнорировать Id, это чисто для постоянства nhibernate.

public class Address
{
  protected virtual int id {get;}
  public virtual string firstLine {get;}
  public virtual string city {get;}
  public virtual string postcode {get;}
}

public class AddressMap : ClassMap<Address>
{
  public AddressMap()
  {
    Id(x => x.Id);
    Map(x=> x.firstline);
    Map(x=> x.city);
    Map(x=> x.postcode);
  }
}

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

1 Ответ

1 голос
/ 10 марта 2011

Я предлагаю вам перейти к функциям автоматического сопоставления Fluent NHibernate, как это делается в проекте Sharp Architecture.

Я использовал в нескольких проектах, и это дает вам возможность сосредоточиться на домене и больше не беспокоиться о постоянстве.

В качестве примера взято из здесь :

public class CustomerMap : IAutoMappingOverride<Customer>
{
    public void Override(AutoMapping<Customer> mapping) {
        mapping.Not.LazyLoad();
        mapping.Id(x => x.Id, "CustomerID")
            .GeneratedBy.Assigned();

        mapping.HasMany(hm => hm.Orders).KeyColumn("CustomerID");
    }
}

Как вы можете видеть, они только определяют свойство Id и отображение на Order и позволяют всем другим свойствам отображаться по соглашению. На самом деле, даже идентификатор может быть отображен с использованием соглашений.

Действительно замечательная особенность - вы можете генерировать схему базы данных из своего домена. Это позволяет вам проводить интеграционные тесты, например, с использованием SQLite.

Посмотрите на это. В любом случае это было очень полезно для меня.

...