ABP入門系列(3)——領域層建立實體

來源:互聯網
上載者:User
這一節我們主要和領域層打交道。首先我們要對ABP的體繫結構以及從模板建立的解決方案進行一一對應。網上有代碼產生器去簡化我們這一步的任務,但是不建議初學者去使用。

一、首先來看看ABP體繫結構

領域層就是業務層,是一個項目的核心,所有商務規則都應該在領域層實現。
實體(Entity): 實體代表業務領域的資料和操作,在實踐中,通過用來映射成資料庫表。
倉儲(Repository): 倉儲用來操作資料庫進行資料存取。倉儲介面在領域層定義,而倉儲的實作類別應該寫在基礎設施層。
領網域服務(Domain service): 當處理的商務規則跨越兩個(及以上)實體時,應該寫在領網域服務方法裡面。
領域事件(Domain Event): 在領域層有些特定情況發生時可以觸發領域事件,並且在相應地方捕獲並處理它們。
工作單元(Unit of Work): 工作單元是一種設計模式,用於維護一個由已經被修改(如增加、刪除和更新等)的業務對象組成的列表。它負責協調這些業務對象的持久化工作及並發問題。

二、再來看看解決方案

確定瞭解決方案下每個項目分別對應那一層後,我們開始建立Task實體。

三、建立Task實體

1.在領域層建立Tasks檔案夾,並建立Task實體類;
2.ABP中所有的實體類都繼承自Entity,而Entity實現了IEntity介面;而IEntity介面是一個泛型介面,通過泛型指定主鍵Id類型,預設的Entity的主鍵類型是int類型。
建立Task,肯定需要儲存建立時間,可以通過實現審計模組中的IHasCreationTime來實現這種通用功能。代碼如下:

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      }}

其中定義了TaskState狀態枚舉。並添加了AssignedPerson導覽屬性,用來儲存分配任務到某個使用者。其中[Required]、[MaxLength]特性是用來進行輸入校正的。

3.定義好實體之後,我們就要去DbContext中定義實體對應的DbSet,以應用Code First 資料移轉。找到我們的基礎服務層,即以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檔案夾下建立時間_Add_Task_Entity格式的類檔案。如果注意觀察,我們會發現Migrations檔案夾下有個SeedData檔案夾,顧名思義,這個檔案夾下的類主要是用來進行預置種子資料的。我們可以參照已有類的寫法,來預置兩條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,斷行符號執行遷移。執行成功後,查看資料庫,Tasks表建立成功,且表中已存在兩條測試資料。

至此,Task實體類成功建立。
源碼已上傳至Github-LearningMpaAbp,可自行參考。
ABP入門系列目錄——學習Abp架構之實操演練

以上就是ABP入門系列(3)——領域層建立實體的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.