1

Onion アーキテクチャとeShopOnContainersのような DDD によって実装したソリューションがあります。

しかし、これを行うには問題があるため、共有することにしました。例を挙げて説明しようと思います。あなたは私がIOrderRepositoryのようなinterface名前を持っていると思いますIOrderRepository

public interface IOrderRepository : IRepository<Order>
    {
        Order Add(Order order);               // first issue
        Task<OrderDTO> GetAsync(int orderId); // second issue
    }

創刊

OrderRepositoryAddのようなメソッドを実装しましたが、次のコードのようなメソッドに追加のパラメーターが必要です。Add

public Order Add(Order order, int par1, int par2)
    {
        // I need a DTO to persist order  
        OrderDTO orderDTO = new OrderDTO({Order = order, Par1 = par1, Par2 = par2 });

        // Call a method with orderDTO parameter as a service to insert order             
    }

ご覧のとおりIOrderRepository、追加のパラメーターが必要なため、実装は間違っています。

最初の問題の間違った解決策

この問題に取り組むには、2 つの間違った解決策があります。

1-調整中IOrderRepository

IOrderRepository次のようにパラメーターを追加して、入力パラメーターを変更します。

public interface IOrderRepository : IRepository<Order>
    {
        Order Add(Order order, int par1, int par2);           
    }

私が知っているように、par1 and par2DDD を実装するためのビジネス ルールはありませんIRepository

2-IOrderRepositoryインフラストラクチャ レイヤーに移動

インフラストラクチャ レイヤーを配置できますがIOrderRepository、これは別の間違ったアーキテクチャです。私の知る限り、この種のインターフェイスは に配置する必要があるためDomain layerです。

私の最初の質問

1-インフラストラクチャ層のリポジトリのメソッドで追加のパラメーターを使用して、パラメーターとドメイン層の間に接続がないドメイン層の IRepository を実装するにはどうすればよいですか?

第二号

でわかるように、インクルード パラメーターと追加パラメーターを返すメソッドをIOrderRepository実装する必要があります。私が知っているように、ドメイン層で DTO (Data Transfer Object) を使用することはできません。それを処理するアイデアが思いつきませんでした。GetAsyncOrderDTOOrder

私の2番目の質問

2-インフラストラクチャレイヤーにあるDTOメソッドを返す方法はありますが、ドメインレイヤーにあるDTOOrderRepositoryメソッドには適用できません。IOrderRepository

お時間をいただきありがとうございます。

4

3 に答える 3