Вопрос

Скажем, у меня есть неизменная iCompositeSertype для борьбы с заливкой или денег, и затем оказывается, что у меня есть еще один объект Value (т. Е. Необвисываемый), который имеет в нем либо датурж, либо стоимость имущества Money. Например, имя, которое имеет эффективноепериод (Daterange).

DataRAngeUserType инкапсулирует некоторую логику, которую я не хотел бы дублировать.

Могу ли я повторно использовать свой DataRAngeUserType внутри названия? Как?

Ваше здоровье,
Беррил

ОБНОВИТЬ

Ниже приведен краткий комментарий к IcompositeSertype, взятому из исходного кода Nhibernate, который предполагает, о чем я думаю, можно сделать, просто не уверен, как. По общему признанию, компонентная стратегия проста и отлично работает, пока вы не думаете, что захотите использовать тот же компонент в другом месте

/// <summary>
/// A UserType that may be dereferenced in a query.
/// This interface allows a custom type to define "properties".
/// These need not necessarily correspond to physical .NET style properties.
///
/// A ICompositeUserType may be used in almost every way
/// that a component may be used. It may even contain many-to-one
/// associations.
///
/// ...
/// </summary>

Используя картирование компонентов

<component name="MyCompositeComponent" class="...">

  <property name="Name" not-null="true" length="50"/>

  <property name="Price" type="...MoneyUserType">
      <column name="Amount"/>
      <column name="Currency"/>
  </property> 

  <property name="EffectivePeriod" type="...DateRangeUserType">
      <column name="EffectiveStart"/>
      <column name="EffectiveEnd"/>
  </property> 

</component>    
Это было полезно?

Решение

Hibernate позволяет составлять типы значений в компонентах:

<class name="MyClass" table="MyTable" >
  ...
  <component name="_namedPeriod">

      <property name="_name" column="PeriodName" />

      <property name="_effectivePeriod" 
                type="MyNamespace.DataRangeUserType, MyAssembly" >

          <column name="PeriodStart" />
          <column name="PeriodEnd" />
      </property>

  </component>
  ...
</class>

Занятия выглядят так:

// entity
public class MyClass {
    private NamedPeriod _namedPeriod;
}

// immutable value object
public class NamedPeriod {
    private readonly String _name;
    // immutable value object
    private readonly DateRange _effectivePeriod;
}

Идея, что вы используете usertypes для примитивов, таких как Daterange, Money и Component для более крупных объектов стоимости. Компоненты также могут включать другие компоненты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top