nhibernateユーザータイプ構成
-
27-10-2019 - |
質問
daterangeまたはお金を扱うための不変のicompositeusertypeを持っているとし、それから私はそれにdaterangeまたはお金の財産値を持っている別の価値オブジェクト(すなわち、不変)を持っていることがわかります。たとえば、有効期間(daterange)を持つ名前。
DatarangeUsertypeは、複製したくないロジックをカプセル化します。
nameusertype内でdatarangeusertypeを再利用できますか?どのように?
乾杯、
ベリー
アップデート
以下は、Nhibernateのソースコードから取られたicompositeusertypeの要約コメントです。これは、私が考えていることを示唆しています。確かに、コンポーネント戦略は簡単で、うまく機能します。
/// <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;
}
より大きな不変の価値オブジェクトのために、daterangeやお金やコンポーネントなどのプリミティブにusertypesを使用するという考え。コンポーネントには、他のコンポーネントも含めることができます。
所属していません StackOverflow