日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

ABP官方文档翻译 3.1 实体

發(fā)布時(shí)間:2025/5/22 130 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABP官方文档翻译 3.1 实体 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)體

  • 實(shí)體類
  • 聚合根類
    • 領(lǐng)域事件
  • 常規(guī)接口
    • 審計(jì)
    • 軟刪除
    • 激活/失活實(shí)體
  • 實(shí)體改變事件
  • IEntity接口

  實(shí)體是DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的核心概念之一。Eric Evans描述它為"An object that is not fundamentally defined by its attributes, but rather by a thread of continuity and identity."所以,實(shí)體有Id并存儲(chǔ)在數(shù)據(jù)庫(kù)。實(shí)體一般映射到關(guān)系庫(kù)中的表。

實(shí)體類

  在ABP,實(shí)體繼承自Entity類。如下示例:

public class Person : Entity {public virtual string Name { get; set; }public virtual DateTime CreationTime { get; set; }public Person(){CreationTime = DateTime.Now;} }

  Persion類定義為實(shí)體。它有兩個(gè)屬性,實(shí)體類還定義了Id屬性,它是實(shí)體的主鍵。所以,所有實(shí)體主鍵的名字都一樣,為Id。

  Id(主鍵)的類型可以改變,默認(rèn)為int(Int32)類型。如果想定義其他類型作為Id,可以按如下所示顯示的聲明:

public class Person : Entity<long> {public virtual string Name { get; set; }public virtual DateTime CreationTime { get; set; }public Person(){CreationTime = DateTime.Now;} }

  還可以將主鍵類型設(shè)置為String、Guid或其他類型。

  實(shí)體類重寫了相等運(yùn)算符(==),可以方便的檢查兩個(gè)實(shí)體是否相等(Id相同)。實(shí)體還定義了IsTransient()方法檢查是否有Id。

聚合根類

  “在DDD中,聚合是一種模式。一個(gè)DDD聚合是領(lǐng)域?qū)ο笕杭?#xff0c;這些領(lǐng)域?qū)ο罂梢宰鳛橐粋€(gè)單元對(duì)待。例如訂單和它的行項(xiàng)目,這些是獨(dú)立的對(duì)象,但是把訂單(和它的行項(xiàng)目)作為一個(gè)聚合對(duì)待是有用的。”(Martin Fowler -參見(jiàn)詳細(xì)描述)。

  雖然ABP不強(qiáng)制使用聚合,在應(yīng)用中,我們或許想創(chuàng)建聚合和聚合根。ABP定義了AggregateRoot類,它擴(kuò)展了實(shí)體為聚合創(chuàng)建聚合根實(shí)體。

領(lǐng)域事件

  聚合根定義了領(lǐng)域事件集合,通過(guò)聚合根類產(chǎn)生領(lǐng)域事件。這些事件在當(dāng)前工作單元完成之前自動(dòng)觸發(fā)。實(shí)際上,任何實(shí)體可以通過(guò)實(shí)現(xiàn)IGeneratesDomainEvents接口來(lái)生成領(lǐng)域事件,但是,通常在(最佳實(shí)踐)聚合根中生成領(lǐng)域事件。這就是為什么默認(rèn)為聚合根而不是其他實(shí)體類。

常規(guī)接口

  在許多應(yīng)用中,相似的實(shí)體屬性(和數(shù)據(jù)庫(kù)表字段)被使用,如CreationTime表示實(shí)體什么事件被創(chuàng)建。ABP提供了一些有用的接口使這些常見(jiàn)屬性顯示聲明。這也提供了編寫實(shí)體常用代碼的一種方式,實(shí)現(xiàn)這些接口。

審計(jì)

  IHasCreationTime使實(shí)體擁有一個(gè)常用的"creation time"屬性。當(dāng)實(shí)現(xiàn)了這個(gè)接口的實(shí)體被插入到數(shù)據(jù)庫(kù)時(shí),ABP自動(dòng)設(shè)置CreationTime為當(dāng)前時(shí)間。

public interface IHasCreationTime {DateTime CreationTime { get; set; } }

  ABP自動(dòng)設(shè)置CreatorUserId為當(dāng)前用戶Id,當(dāng)保存一個(gè)新實(shí)體的時(shí)候。也可以通過(guò)將實(shí)體繼承CreationAuditedEntity類來(lái)實(shí)現(xiàn)ICreationAudited接口。它也有一個(gè)泛型版本,可以實(shí)現(xiàn)不同類型的Id屬性。

  修改也有類似的接口:

public interface IHasModificationTime {DateTime? LastModificationTime { get; set; } }public interface IModificationAudited : IHasModificationTime {long? LastModifierUserId { get; set; } }

  當(dāng)更新實(shí)體時(shí),ABP自動(dòng)設(shè)置這些屬性。只需要在實(shí)體中定義他們。

  如果想實(shí)現(xiàn)所有的審計(jì)屬性,可以直接實(shí)現(xiàn)IAudited接口:

public interface IAudited : ICreationAudited, IModificationAudited {}

  有一個(gè)捷徑,可以直接繼承AuditedEntity類而不是直接實(shí)現(xiàn)IAudited接口。AuditedEntity類也有一個(gè)泛型版本,以適應(yīng)不同類型的Id屬性。

  注意:ABP從ABP會(huì)話中獲取當(dāng)前用戶Id。

軟刪除

  軟刪除是常用的模式,用來(lái)標(biāo)記實(shí)體刪除而不是真的從數(shù)據(jù)庫(kù)中刪除。例如,可能不想從數(shù)據(jù)庫(kù)中硬刪除一個(gè)用戶,因?yàn)樗推渌碛性S多關(guān)系。ISoftDelete接口用來(lái)實(shí)現(xiàn)這個(gè)目的:

public interface ISoftDelete {bool IsDeleted { get; set; } }

  ABP實(shí)現(xiàn)了開(kāi)箱即用的軟刪除模式。當(dāng)軟刪除實(shí)體被刪除時(shí),ABP會(huì)檢測(cè)到并阻止刪除,設(shè)置IsDeleted為true,然后更新實(shí)體到數(shù)據(jù)庫(kù)。ABP不會(huì)從數(shù)據(jù)庫(kù)中獲取(select)軟刪除的實(shí)體,自動(dòng)過(guò)濾他們。

  如果使用軟刪除,也想記錄實(shí)體什么時(shí)候被刪除、誰(shuí)刪除,可以實(shí)現(xiàn)IDeletionAudited接口,如下所示:

public interface IDeletionAudited : ISoftDelete {long? DeleterUserId { get; set; }DateTime? DeletionTime { get; set; } }

  IDeletionAudited擴(kuò)展了ISoftDelete接口。當(dāng)實(shí)體被刪除時(shí),ABP自動(dòng)記錄這些屬性。

  如果想讓實(shí)體實(shí)現(xiàn)所有的審計(jì)接口(creation、modification和deletion),可以直接實(shí)現(xiàn)IFullAudited接口,因?yàn)樗^承自所有接口:

public interface IFullAudited : IAudited, IDeletionAudited {}

  有個(gè)捷徑,可以使實(shí)體繼承自FullAuditedEntity類,它實(shí)現(xiàn)了所有。

  • NOTE1:所有的審計(jì)接口和類都有一個(gè)泛型版本,用來(lái)定義User實(shí)體(如ICreationAudited<TUser>和FullAuditedEntity<TPrimaryKey,TUser>)的導(dǎo)航屬性。
  • NOTE2:所有這些都有一個(gè)聚合根版本,如AuditedAggregateRoot。

激活/失活實(shí)體

  一些實(shí)體需要被記錄為激活或失活。然后可以基于實(shí)體的激活/失活狀態(tài)進(jìn)行操作。可以實(shí)現(xiàn)IPassiveable接口,這個(gè)接口便是為這個(gè)目的設(shè)計(jì)的。它定義了IsActive屬性。

  如果實(shí)體第一次創(chuàng)建時(shí)為激活狀態(tài),那么可以在構(gòu)造函數(shù)中設(shè)置IsActive為true。

  這和軟刪除(IsDeleted)是不同的。如果實(shí)體被軟刪除,它不能從數(shù)據(jù)庫(kù)中獲取(ABP默認(rèn)會(huì)阻止獲取),但是,對(duì)于激活/失活的實(shí)體,控制獲取實(shí)體完全由自己決定。

實(shí)體改變事件

  當(dāng)實(shí)體被插入、更新或刪除時(shí),ABP自動(dòng)觸發(fā)這些確定的事件。然后,我們可以注冊(cè)這些事件,執(zhí)行需要的任何邏輯。參見(jiàn)在事件總線文檔的預(yù)定義事件部分了解更多信息。

IEntity接口

  實(shí)際上,Entity類實(shí)現(xiàn)了IEntity接口(Entity<TPrimaryKey>實(shí)現(xiàn)了IEntity<TPrimaryKey>)。如果不想從Entity類集成,可以直接實(shí)現(xiàn)這些接口。其他實(shí)體類也有相關(guān)的接口。但是,不建議使用這種方式,除非有好的理由不從Entity類繼承。

?

返回主目錄

轉(zhuǎn)載于:https://www.cnblogs.com/xajh/p/6814894.html

總結(jié)

以上是生活随笔為你收集整理的ABP官方文档翻译 3.1 实体的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。