1. 程式人生 > >應用程式框架實戰十四:DDD分層架構之領域實體(基礎篇)

應用程式框架實戰十四:DDD分層架構之領域實體(基礎篇)

using System.ComponentModel.DataAnnotations;
using System.Text;

namespace Util.Domains {
    /// <summary>
    /// 領域實體
    /// </summary>
    /// <typeparam name="TKey">標識型別</typeparam>
    public abstract class EntityBase<TKey> {

        #region 構造方法

        /// <summary>
/// 初始化領域實體 /// </summary> /// <param name="id">標識</param> protected EntityBase( TKey id ) { Id = id; } #endregion #region 欄位 /// <summary> /// 描述 /// </summary> private StringBuilder _description;
#endregion #region Id(標識) /// <summary> /// 標識 /// </summary> [Required] public TKey Id { get; private set; } #endregion #region Equals(相等運算) /// <summary> /// 相等運算 /// </summary> public
override bool Equals( object entity ) { if ( entity == null ) return false; if ( !( entity is EntityBase<TKey> ) ) return false; return this == (EntityBase<TKey>)entity; } #endregion #region GetHashCode(獲取雜湊) /// <summary> /// 獲取雜湊 /// </summary> public override int GetHashCode() { return Id.GetHashCode(); } #endregion #region ==(相等比較) /// <summary> /// 相等比較 /// </summary> /// <param name="entity1">領域實體1</param> /// <param name="entity2">領域實體2</param> public static bool operator ==( EntityBase<TKey> entity1, EntityBase<TKey> entity2 ) { if ( (object)entity1 == null && (object)entity2 == null ) return true; if ( (object)entity1 == null || (object)entity2 == null ) return false; if ( entity1.Id == null ) return false; if ( entity1.Id.Equals( default( TKey ) ) ) return false; return entity1.Id.Equals( entity2.Id ); } #endregion #region !=(不相等比較) /// <summary> /// 不相等比較 /// </summary> /// <param name="entity1">領域實體1</param> /// <param name="entity2">領域實體2</param> public static bool operator !=( EntityBase<TKey> entity1, EntityBase<TKey> entity2 ) { return !( entity1 == entity2 ); } #endregion #region ToString(輸出領域物件的狀態) /// <summary> /// 輸出領域物件的狀態 /// </summary> public override string ToString() { _description = new StringBuilder(); AddDescriptions(); return _description.ToString().TrimEnd().TrimEnd( ',' ); } /// <summary> /// 新增描述 /// </summary> protected virtual void AddDescriptions() { } /// <summary> /// 新增描述 /// </summary> protected void AddDescription( string description ) { if ( string.IsNullOrWhiteSpace( description ) ) return; _description.Append( description ); } /// <summary> /// 新增描述 /// </summary> protected void AddDescription<T>( string name, T value ) { if ( string.IsNullOrWhiteSpace( value.ToStr() ) ) return; _description.AppendFormat( "{0}:{1},", name, value ); } #endregion } } using System; namespace Util.Domains { /// <summary> /// 領域實體基類 /// </summary> public abstract class EntityBase : EntityBase<Guid> { /// <summary> /// 初始化領域實體 /// </summary> /// <param name="id">標識</param> protected EntityBase( Guid id ) : base( id ) { } } }