ここで明らかな何かが欠けている可能性があります...
しかし、IoCとctorインジェクションの栄光を理解することを学ぶにつれて、これをオブジェクトグラフのシリアル化と調整するのに苦労しています。2つのパターンは互換性がありますか?なぜ(またはなぜそうではない)?
次のようなものがあるとします。
public class Foo
{
#region invariants
private readonly List<IBar> _bars;
private readonly Guid _id;
#endregion
public Foo( List<IBar> bars, Guid id )
{
_bars = bars.CannotBeNull("bars");
_id = id.CannotBeNull("id");
}
public List<IBar> Bars { get { return _bars; } }
//some other state I want serialized
}
public static class Ex
{
public static T CannotBeNull<T>( this T obj, string paramName = "" )
{
if ( null == obj ) throw new ArgumentNullException(paramName);
return obj;
}
}
私は、コンストラクター注入によってクラスの不変条件を保護する鉄で覆われた安全装置が好きです。それは私のオブジェクトに彼らが常に彼らが必要とするものを持っているという確実性を与えます。不変条件の注入はリポジトリパターンと対立していますか?たぶん、ギャップを埋めるDTOレイヤーとファクトリパターンがどこかにあります...?
賢明なアドバイスを探しています...2つのパターンは互換性がありますか?なぜ(またはなぜそうではない)?
PS:IDeserializationCallbackについては知っていますが、「プライベート読み取り専用」の不変条件でどのように役立つかわかりません