设为首页 加入收藏

TOP

应用程序框架(一):DDD分层架构:领域实体(基础篇)(三)
2019-09-17 18:53:40 】 浏览:91
Tags:应用程序 框架 DDD 分层 架构 领域 实体 基础
/// </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 ); }

  在子类中需要重写AddDescriptions方法,并在该方法中调用AddDescription这个辅助方法来添加属性名值对的描述。

  由于验证和日志等内容需要一些公共操作类提供帮助,所以放到后面几篇进行介绍。

  为了使泛型的EntityBase<TKey>用起来更简单一点,我创建了一个EntityBase,它从泛型EntityBase<Guid>派生,这是因为我现在主要使用Guid作为标识类型。

namespace Util.Domains 
{
    /// <summary>
    /// 领域实体基类
    /// </summary>
    public abstract class EntityBase : EntityBase<Guid> 
    {
        /// <summary>
        /// 初始化领域实体
        /// </summary>
        /// <param name="id">标识</param>
        protected EntityBase( Guid id )
            : base( id ) {
        }
    }
}

   完整单元测试代码如下:

using System;

namespace Util.Domains.Tests.Samples {
    /// <summary>
    /// 测试实体
    /// </summary>
    public class Test : EntityBase {
        /// <summary>
        /// 初始化
        /// </summary>
        public Test()
            : this( Guid.NewGuid() ) {
        }

        /// <summary>
        /// 初始化员工
        /// </summary>
        /// <param name="id">员工编号</param>
        public Test( Guid id )
            : base( id ) {
        }

        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 添加描述
        /// </summary>
        protected override void AddDescriptions() {
            AddDescription( "Id:"+ Id + "," );
            AddDescription( "姓名", Name );
        }
    }
}

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Util.Domains.Tests.Samples;

namespace Util.Domains.Tests {
    /// <summary>
    /// 实体基类测试
    /// </summary>
    [TestClass]
    public class EntityBaseTest {
        /// <summary>
        /// 测试实体1
        /// </summary>
        private Test _test1;
        /// <summary>
        /// 测试实体2
        /// </summary>
        private Test _test2;

        /// <summary>
        /// 测试初始化
        /// </summary>
        [TestInitialize]
        public void TestInit() {
            _test1 = new Test();
            _test2 = new Test();
        }

        /// <summary>
        /// 通过构造方法设置标识
        /// </summary>
        [TestMethod]
        public void TestId() {
            Guid id = Guid.NewGuid();
            _test1 = new Test( id );
            Assert.AreEqual( id, _test1.Id );
        }

        /// <summary>
        /// 新创建的实体不相等
        /// </summary>
        [TestMethod]
        public void TestNewEntityIsNotEquals() {
            Assert.IsFalse( _test1.Equals( _test2 ) );
            Assert.IsFalse( _test1.Equals( null ) );

            Assert.IsFalse( _test1 == _test2 );
            Assert.IsFalse( _test1 == null );
            Assert.IsFalse( null == _test2 );

            Assert.IsTrue( _test1 != _test2 );
            Assert.IsTrue( _test1 != null );
            Assert.IsTrue( null != _test2 );
        }

        /// <summary>
        /// 当两个实体的标识相同,则实体相同
        /// </summary>
        [TestMethod]
        public void TestEntityEq
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇战狼:业务高速增长下,如何保证.. 下一篇互联网分层架构的本质

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目