学习dotnetcore/Util(一)


    Util框架--.Net应用程序框架,由何镇汐在github开源,他的对net core,angular,软件设计模式,DDD方面都有自己见解,而且可以活用,代码写得那么好,真的我敬仰的偶像,对我这种程序爱好者,完全自己自学,而且没有接受的别人的指点,重点的头脑又不太好,简直是佩服地不行,一直幻想自己可以像他那样,能够把应用做得那么好,那么自主。想想自己的学习,没有好的习惯,重要是方法又不对,浪费那么多时间,有点沮丧。看了别人博客,倡导多写,多总结,多分享,因此我也把自己思考写下来,哪怕错的也好,只有有助于自己提高就可以了。

   看了代码,感觉很为难,很难弄懂作者意图,只有片断的代码 可以了解,自己觉得后面要用上,就不需要自己做重重复复的工作,这样多美妙。

   那么怎么看代码,从头对尾看,肯定是不对,因此很快你就看不去,我试了几次,有部分能看懂,但是连贯不上来,也是白看。博客也看了,感觉写得比较好,可以还是不能受用,他建议自己参考他们的,然后写自己的框架,这样就能成为自己的,我也想这么做,可以看了看不懂,怎么做,因此还是想理清楚才好。

  我先理清脉落吧,用UML图,可我只看过,没有用过,先不管对不对,把关联关系弄出来,再学习UML,觉得自己比较好。

1、先从实体找起,因为实体是客观世界一个描述,不同领域的实体描述肯定是不一样,实体也一定有属性和方法,这样先抽象出它的基本的属性和方法

      实体有唯一的标识,有版本号,实体属性肯定是验证,实体要跟踪变化;实体要有一个聚合根,对外提供访问。

      

因为里面字段和方法比较多,就不一一列出来,可以看出最主要方法就是3个抽象类,领域顶层基类,实体类,聚合根类。这三个类,主要看下他们构造方法,比较特殊,首先是领域对象,主要看实体类,泛形就实体类型,标识类型,看下以下代码 ,这样设计,你能好理解呢

 public abstract class EntityBase<TEntity, TKey> : DomainBase<TEntity>, IEntity<TEntity, TKey> where TEntity : IEntity 

  这个抽象类怎么用呢,你能会用呢,这个KEY是标识符类型,可以有int,string,最常见是guid,实体类型有什么用呢,有点困难,幸好有测试用例,

发现没有基于它的具体类,发现只有AggregateRootSample。来分析一下, 这是不是说每一个实体都有一个聚合根呢,等下再看聚合的讲义

 public abstract class AggregateRoot<TEntity, TKey> : EntityBase<TEntity, TKey>, IAggregateRoot<TEntity, TKey> where TEntity : IAggregateRoot

 在AggregateRootSample ,直接就类型定义其本身,

public class AggregateRootSample : AggregateRoot<AggregateRootSample>

  在测试方法里面,就定义比较,验证等内容,感觉还是比较好理解,特别在验证的处理,增加验证方法,处理验证处理器,这个处理比较灵活,

/// <summary>
        /// 测试添加验证规则
        /// </summary>
        [Fact]
        public void TestAddValidationRule() {
            _sample = AggregateRootSample.CreateSample();
            AssertHelper.Throws<Warning>( () => {
                _sample.Name = "abcd";
                _sample.AddValidationRule( new ValidationRuleSample( _sample ) );
                _sample.Validate();
            }, "名称长度不能大于3" );
        }

        /// <summary>
        /// 测试设置验证处理器 - 不进行任何操作,所以不会抛出异常
        /// </summary>
        [Fact]
        public void TestSetValidationHandler() {
            _sample = AggregateRootSample.CreateSample();
            //_sample.Name = "abcd";
            _sample.AddValidationRule( new ValidationRuleSample( _sample ) );
            _sample.SetValidationHandler( new ValidationHandlerSample() );
            _sample.Validate();
        }

  好了,先不写,明天再学习,树型实体。

猜你喜欢

转载自www.cnblogs.com/cloudsu/p/9380219.html
今日推荐