CodeArt入门教程

Posted 一个人抽烟的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeArt入门教程相关的知识,希望对你有一定的参考价值。

6. 为领域模型编码

  现在我们为账户子系统(AccountSubsystem)设计领域对象并编码实现细节。

  账号、角色、权限是账户子系统里已知的3个事物,而一个子系统里面可以有多个内聚模型,所以我们首先要思考的问题是:以谁为聚合根创建第一个内聚模型?

  与如何划分子系统的思路一样,我们以最简单、最独立的事物作为突破口。简单是指事物在特定领域里的特征比较少,没有那么复杂。很明显,权限是最简单、最独立的,它不依赖于账号、角色而独立存在,而且从目前收集到的需求来看,权限的特征只需要有名称即可。所以我们尝试以权限(Permission)为聚合根创建第一个内聚模型。请各位注意,我在这里用“尝试”一词表达要做的工作,因为我们并不能保证当前做的决策100%是对的,但是勇敢的去尝试总比畏首畏尾、不敢迈出第一个步子、始终原地踏步要好的多。所以各位在实践的时候,如果有了灵感、有了大致的思路,就算思路还不够全面、不够清晰,你也可以大胆的去尝试,CA可以保证即便设计有误也能及时修正。使用CA开发项目的过程就是不断的在分析、设计、实践、修正中反复迭代的过程,最终你会提炼出与事物本质特征相符的领域模型。

  Permission的代码和详细说明如下:

 

  1 using System;
  2 
  3 using CodeArt.DomainDriven;
  4 
  5 namespace AccountSubsystem
  6 {
  7     /// <summary>
  8     /// 权限对象
  9     /// </summary>
 10     [ObjectRepository(typeof(IPermissionRepository))]
 11     [ObjectValidator(typeof(PermissionSpecification))]
 12     public class Permission : AggregateRoot<Permission, Guid>
 13     {
 14         internal static readonly DomainProperty NameProperty = DomainProperty.Register<string, Permission>("Name");
 15 
 16         /// <summary>
 17         /// 权限名称
 18         /// </summary>
 19         [PropertyRepository()]
 20         [NotEmpty()]
 21         [StringLength(2, 25)]
 22         public string Name
 23         {
 24             get
 25             {
 26                 return GetValue<string>(NameProperty);
 27             }
 28             set
 29             {
 30                 SetValue(NameProperty, value);
 31             }
 32         }
 33 
 34 
 35         internal static readonly DomainProperty MarkedCodeProperty = DomainProperty.Register<string, Permission>("MarkedCode");
 36 
 37 
 38         /// <summary>
 39         /// <para>权限的唯一标示,可以由用户设置</para>
 40         /// <para>可以通过唯一标示找到权限对象</para>
 41         /// <para>该属性可以为空</para>
 42         /// </summary>
 43         [PropertyRepository()]
 44         [StringLength(0, 50)]
 45         public string MarkedCode
 46         {
 47             get
 48             {
 49                 return GetValue<string>(MarkedCodeProperty);
 50             }
 51             set
 52             {
 53                 SetValue(MarkedCodeProperty, value);
 54             }
 55         }
 56 
 57         /// <summary>
 58         /// 是否定义了标识码
 59         /// </summary>
 60         public bool DeclareMarkedCode
 61         {
 62             get
 63             {
 64                 return !string.IsNullOrEmpty(this.MarkedCode);
 65             }
 66         }
 67 
 68 
 69         private static readonly DomainProperty DescriptionProperty = DomainProperty.Register<string, Permission>("Description");
 70 
 71         /// <summary>
 72         /// <para>描述</para>
 73         /// </summary>
 74         [PropertyRepository()]
 75         [StringLength(0, 200)]
 76         public string Description
 77         {
 78             get
 79             {
 80                 return GetValue<string>(DescriptionProperty);
 81             }
 82             set
 83             {
 84                 SetValue(DescriptionProperty, value);
 85             }
 86         }
 87 
 88         [ConstructorRepository()]
 89         public Permission(Guid id)
 90             : base(id)
 91         {
 92             this.OnConstructed();
 93         }
 94 
 95         #region 空对象
 96 
 97         private class PermissionEmpty : Permission
 98         {
 99             public PermissionEmpty()
100                 : base(Guid.Empty)
101             {
102                 this.OnConstructed();
103             }
104 
105             public override bool IsEmpty()
106             {
107                 return true;
108             }
109         }
110 
111         public static readonly Permission Empty = new PermissionEmpty();
112 
113         #endregion
114     }
115 }

 

 

 

 

 

 

 

 

 

  本章剩余内容正在整理上传中。。。

以上是关于CodeArt入门教程的主要内容,如果未能解决你的问题,请参考以下文章

CodeArt入门教程

从零开始使用CodeArt实践最佳领域驱动开发

VIM 代码片段插件 ultisnips 使用教程

markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章

推荐net开发cad入门阅读代码片段

片段 getActivity 不起作用