このセクションでは主にドメイン層を扱います。まず、ABP のアーキテクチャとテンプレートから作成されたソリューションを 1 対 1 に対応させる必要があります。このステップのタスクを簡素化するためにオンラインで利用できるコード ジェネレーターがありますが、初心者にはお勧めできません。
1. まず、ABP アーキテクチャを見てみましょう
ドメイン層はビジネス層であり、すべてのビジネス ルールはドメイン層に実装される必要があります。
エンティティ: エンティティは、ビジネス ドメイン内のデータと操作を表し、実際にはデータベース テーブルにマッピングするために使用されます。
リポジトリ: リポジトリは、データアクセスのためにデータベースを操作するために使用されます。ウェアハウジング インターフェイスはドメイン層で定義されますが、ウェアハウジング実装クラスはインフラストラクチャ層で作成する必要があります。
ドメイン サービス: 処理されるビジネス ルールが 2 つ (またはそれ以上) のエンティティにまたがる場合、ドメイン サービス メソッドで記述する必要があります。
ドメイン イベント: ドメイン イベントは、ドメイン層で特定の状況が発生したときにトリガーされ、対応する場所でキャプチャして処理できます。
作業単位: 作業単位は、変更された (追加、削除、更新など) ビジネス オブジェクトのリストを維持するために使用される設計パターンです。これらのビジネス オブジェクトの永続性と同時実行性の問題を調整する責任があります。
次に、ソリューションを見てみましょう
ソリューションの下の各プロジェクトがどのレイヤーに対応するかを決定した後、Task エンティティの作成を開始しました。
3. タスク エンティティを作成します
1. ドメイン層にタスク フォルダーを作成し、タスク エンティティ クラスを作成します。
2. ABP のすべてのエンティティ クラスは、IEntity インターフェイスを実装します。ジェネリックによって主キー ID の型を指定するジェネリック インターフェイス。Entity のデフォルトの主キーの型は int 型です。
タスクを作成するときは、必ず作成時間を節約する必要があります。この共通の機能は、監査モジュールに IHasCreationTime を実装することで実現できます。コードは次のとおりです: TaskState 状態列挙体を定義する
namespace LearningMpaAbp.Tasks{ public class Task : Entity, IHasCreationTime { public const int MaxTitleLength = 256; public const int MaxDescriptionLength = 64 * 1024;//64kb public long? AssignedPersonId { get; set; } [ForeignKey("AssignedPersonId")] public User AssignedPerson { get; set; } [Required] [MaxLength(MaxTitleLength)] public string Title { get; set; } [Required] [MaxLength(MaxDescriptionLength)] public string Description { get; set; } public TaskState State { get; set; } public DateTime CreationTime { get; set; } public Task() { CreationTime = Clock.Now; State = TaskState.Open; ; } public Task(string title, string description = null) : this() { Title = title; Description = description; } } public enum TaskState : byte { Open = 0, Completed = 1 }}
。また、割り当てられたタスクをユーザーに保存するための AssignedPerson ナビゲーション属性を追加しました。 [Required] および [MaxLength] 機能は入力検証に使用されます。
3. エンティティを定義した後、Code First データ移行を適用するには、DbContext でエンティティに対応する DbSet を定義する必要があります。基本的なサービス層、つまり EntityFramework で終わるプロジェクト内で DbContext クラスを見つけ、次のコードを追加します
//TODO: Define an IDbSet for your Entities... public IDbSet<Task> Tasks { get; set; }
4. Code First データ移行を実行します。
パッケージマネージャーコンソールを開き、Entityframeworkに対応するプロジェクトをデフォルトプロジェクトとして選択します。 Add-Migration Add_Task_Entity を実行して移行を作成します。
作成が成功すると、migrations フォルダーに time_Add_Task_Entity 形式のクラス ファイルが作成されます。よく観察すると、Migrations フォルダーの下に SeedData フォルダーがあることがわかります。名前が示すように、このフォルダー内のクラスは主にシード データをプリセットするために使用されます。既存のクラスの書き方を参考にして、2つのTaskを事前に設定することができます。次のコードを使用して DefaultTestDataForTask クラスを作成します。
namespace LearningMpaAbp.Migrations.SeedData{public class DefaultTestDataForTask{ private readonly LearningMpaAbpDbContext _context; private static readonly List<Task> _tasks; public DefaultTestDataForTask(LearningMpaAbpDbContext context) { _context = context; } static DefaultTestDataForTask() { _tasks = new List<Task>() { new Task("Learning ABP deom", "Learning how to use abp framework to build a MPA application."), new Task("Make Lunch", "Cook 2 dishs") }; } public void Create() { foreach (var task in _tasks) { _context.Tasks.Add(task); _context.SaveChanges(); } } } }
次に、Configuration クラスの Seed メソッドに次のコードを追加します。
new DefaultTestDataForTask(context).Create();
パッケージ マネージャー コンソールで、「Update-Database」と入力し、Enter キーを押して移行を実行します。実行が成功したら、データベースをチェックして、Tasks テーブルが正常に作成され、テーブルに 2 つのテスト データがすでに存在していることを確認します。
この時点で、Task エンティティ クラスが正常に作成されました。
ソースコードはGithub-LearningMpaAbpにアップロードされていますので、ご自身で参照してください。
ABP 入門シリーズディレクトリ - Abp フレームワークを学ぶための実践演習
上記は ABP 入門シリーズ (3) - ドメイン層でのエンティティの作成の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 (www.php.cn)!