Dapperドットネットによるドメインエンティティのプライベート属性のマッピング

c# dapper domain-driven-design fluent-nhibernate-mapping orm

質問

ほとんどのプロジェクトでは、nHibernate + Fluentマッピングを使用しています。最近、Dapperを使って読み込み操作を移動できるかどうかを確認し始めました。

私はDDDのアプローチに従うので、私のドメインエンティティにはパブリックセッターはいません。例えば:

public class User
{
    private int _id;
    private string _name;
    private IList<Car> _carList;

    protected User(){} // Fluent Mapping

    public User(string id, string name)
    {
        // validation 
        // ...
        _id = id;
        _name = name;
    }

    public int Id{ get {return _id;} }
    public string Name { get {return _name;} }
    public IList<Car> CarList { get {return _carList;}}         
}

public class Car
{
    private int _id;
    private string _brand;

    protected Car(){} // Fluent Mapping

    public Car(string id, string brand)
    {
        // validation 
        // ...
        _id = id;
        _brand= brand;
    }

    public int Id{ get {return _id;} }
    public string Brand { get {return _brand;} }
}

Fluent nHibernateでは、マッピングのメンバーを明らかにすることができます:

Id(Reveal.Member<User>("_id")).Column("id");
Map(Reveal.Member<User>("_name")).Column("name");

Dapperでドメインエンティティをマッピングする方法はありますか?もしそうなら、どうですか?

受け入れられた回答

1つのオプションは、Dapperで動作する永続クラスの別のセットを作成することです。たとえば、UserRecordおよびCarRecordです。レコードクラスはdbテーブルと一致し、永続モジュール内でカプセル化されます。 Dapperクエリはこのクラスに対して実行され、次にドメインエンティティをアセンブルしてクライアントに返す個別の永続ファクトリを持つことができます。

小さな例:

        var carRecord = DbConnection.Query<CarRecord>("select * from cars where id = @id", new {id = 1});
        var carEntity = CarFactory.Build(carRecord);

これは良い分離を作り、柔軟性を提供します。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ