ホームページ  >  記事  >  バックエンド開発  >  ABP入門シリーズ(4) - ドメイン層の定義とウェアハウジングの実装

ABP入門シリーズ(4) - ドメイン層の定義とウェアハウジングの実装

黄舟
黄舟オリジナル
2017-01-16 17:26:382932ブラウズ

リポジトリ: リポジトリは、データアクセスのためにデータベースを操作するために使用されます。ウェアハウジング インターフェイスはドメイン層で定義されますが、ウェアハウジング実装クラスはインフラストラクチャ層で作成する必要があります。

ABP では、ウェアハウス クラスは IRepository インターフェイスを実装する必要があります。これは、同期メソッドと非同期メソッドを含む、一般的に使用される追加、削除、変更、集計メソッドを定義します。これには主に次のメソッドが含まれます:


ABP入門シリーズ(4) - ドメイン層の定義とウェアハウジングの実装

ABP は、さまざまな ORM フレームワークにこのインターフェイスのデフォルト実装を提供します。
EntityFramework の場合は、EfRepositoryBase の汎用バージョンの実装を提供します。
NHibernate の場合、NhRepositoryBase の汎用バージョンの実装が提供されます。

ジェネリック バージョンの実装は、ほとんどの場合、これらのメソッドで一般エンティティのニーズを満たすのに十分であることを意味します。これらのメソッドがエンティティに十分である場合、このエンティティに必要なリポジトリ インターフェイス/クラスを作成する必要はありません。

アプリケーション サービス レイヤーでウェアハウス参照を直接定義し、コンストラクターを通じてそれを挿入できます。タスク ウェアハウジングは、次の方法でアプリケーション サービス層で使用できます:

public class TaskAppService : ITaskAppService { 
private readonly IRepository<Task> _taskRepository; 
public TaskAppService(IRepository<Task> taskRepository) 
{ 
    _taskRepository = taskRepository; 
}

これは、サンプル コードで使用されるメソッドです

2. カスタム ウェアハウジングを実装する方法

どのタスクがタスクに割り当てられているかを調べる必要があるとします。とあるユーザー。

ドメイン層で、IRepositories フォルダーを作成し、IBackendTaskRepository を定義します。

namespace LearningMpaAbp.IRepositories
{/// <summary>/// 自定义仓储示例/// </summary>public interface IBackendTaskRepository : IRepository<Task>
{    /// <summary>
    /// 获取某个用户分配了哪些任务
    /// </summary>
    /// <param name="personId">用户Id</param>
    /// <returns>任务列表</returns>
    List<Task> GetTaskByAssignedPersonId(long personId);
}
}

このウェアハウジングをインフラストラクチャ層で実装します。

namespace LearningMpaAbp.EntityFramework.Repositories
{public class BackendTaskRepository:LearningMpaAbpRepositoryBase<Task>,IBackendTaskRepository{   
public BackendTaskRepository(IDbContextProvider<LearningMpaAbpDbContext> dbContextProvider) : base(dbContextProvider)
    {
    }    /// <summary>
    /// 获取某个用户分配了哪些任务
    /// </summary>
    /// <param name="personId">用户Id</param>
    /// <returns>任务列表</returns>
    public List<Task> GetTaskByAssignedPersonId(long personId)
    {        var query = GetAll();        if (personId>0)
        {
            query = query.Where(t => t.AssignedPersonId == personId);
        }        return query.ToList();
    }
}
}

このリポジトリ実装は、テンプレートによって生成された LearningMpaAbpRepositoryBase 汎用抽象クラスを継承し、IBackendTaskRepository インターフェイスを実装します。ここでは、実装クラスのパラメーター化されたコンストラクターを明示的に宣言し、汎用 IDbContextProvider を使用してデータベース コンテキスト サブクラス ChargeStationContext を親クラスのコンストラクターに渡す必要があります。

ABP入門シリーズ(4) - ドメイン層の定義とウェアハウジングの実装


3. 倉庫保管上の注意事項

保管方法では、ABP がデータベース接続を自動的に開閉します。

ウェアハウスメソッドが呼び出されると、データベース接続が自動的に開かれ、トランザクションが開始されます。

リポジトリ メソッドが別のリポジトリ メソッドを呼び出すと、実際には同じデータベース接続とトランザクションを共有します。

IRepository インターフェイスはデフォルトで ITransientDependency インターフェイスを継承するため、Repository オブジェクトは一時的なものです。したがって、IOC コンテナは、ウェアハウジング オブジェクトを挿入する必要がある場合にのみ、ウェアハウス オブジェクトの新しいインスタンスを自動的に作成します。

デフォルトの汎用リポジトリは、ほとんどのニーズを満たすことができます。これが満たされない場合にのみ、カスタマイズされたリポジトリが作成されます。

ソースコードはGithub-LearningMpaAbpにアップロードされていますので、ご自身で参照してください。
ABP 入門シリーズディレクトリ - Abp フレームワークを学ぶための実践的な演習

上記は ABP 入門シリーズ (4) - ドメイン層でのウェアハウジングの定義と実装の内容です。さらに関連する内容については、PHP 中国語に注目してください。ウェブサイト (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。