.NET设计规范四:简单的扩展设计与个人思考
有一个星期没有写文章记录学习与工作之路了,今天趁着是五四青年节下午休息的时光写了.NET设计规范的最后一篇了!
在做好一系列的命名规范,设计规范之后,更高层的规范就是那些扩展性的规范了(或者说是面向对象,其实这方面我是菜菜鸟),这里我只简单的说说!
说实话写这样的文章真不好写,尤其是涉及到架构方面的设计我更是无从下手,所以我就把书本上的总结一下,尽量少一点个人想法!
接着上三篇:①.NET设计规范一:设计规范基础 ②.NET设计规范二:类型成员设计 ③.NET设计规范三:类型和类型成员设计的约定和惯用法
5.扩展性设计
5.1密封类
①不推荐使用密封类,除非有特殊的理由
5.2抽象类和抽象接口
①必要的时候应该定义一个抽象类(或者是一个基类)和一个接口,然后用抽象类(或基类)实现这个接口
5.3基类
6.异常的设计
6.1自定义异常的设计
①避免太深的继承层次
②必须要从“System.Exception”派生出新的异常类,这是个规范
③要在异常类名称后面加上“Exception”后缀
④要是的异常可以序列化,这是为了能够跨应用程序和跨平台
⑤要为异常提供常用的构造函数
⑥要定义“ToString”方法返回异常信息
⑦书中的两点建议,不怎么明白
1 [Serializable] 2 public class MyException:Exception //这是最简单的异常处理信息 3 { 4 private string _message; 5 6 public MyException() 7 {} 8 public MyException(string message) 9 { 10 _message = message; 11 } 12 13 public override string ToString() 14 { 15 // TO DO. 16 return ""; 17 } 18 }
PS:书中对异常的介绍写了很多,可是理解的很少,这里就把自己的理解写了下来,所以还需要在看几遍,这样才能慢慢的理解他!
7.数组,特性,集合的编码规范
7.1数组
①优先使用集合而不是数组
②不要把数组设计为只读数组,应该使得用户可以修改数组中的元素
7.2Attribute(特性)
①命名时要添加“Attribute”后缀,并且继承“Attribute”基类
public class MyAttribute:Attribute
②要在自定义的时候使用“AttributeUsageAttribute”这个特性
1 [AttributeUsage(AttributeTargets.All)] 2 public class MyAttribute : Attribute 3 { 4 5 }
③要为可选参数提供可设置的属性
④要为必填参数提供只读属性
⑤要提供构造函数对必填参数进行初始化,每个参数名应该与相应的属性名一样(可能大小写会不一样)
1 [AttributeUsage(AttributeTargets.All)] 2 public class MyAttribute : Attribute 3 { 4 public MyAttribute(string name, string message) 5 { 6 Name = name; 7 Message = message; 8 } 9 10 private string Name { get; set; } //这是必填参数 11 private string Message { get; set; } //这是必填参数 12 public string Author { get; set; } //这是可选参数 13 } 14 15 [My("ss", "ss", Author = "sss")] //那么我在调用时就会出现如下调用方式 16 public class One 17 { }
⑤尽可能把自定义的Attribute密封起来,这样会是的查找“Attribute”更快
⑥避免提供构造函数对可选参数进行初始化
⑦避免对自定义的“Attribute”构造函数进行重载
7.3关于集合属性和返回值
①不要提供可设置的集合属性
1 public Collection<String> Items { get; set; } //坏的设计 2 public Collection<string> Items //提倡的设计 3 { 4 get 5 { 6 // TO DO 7 } 8 }
②要用“Collection<T>”或其子类作为属性或返回值来表示可读写的集合(就像上面一样)
③使用“ReadOnlyCollection<T>”作为属性或返回值来表示只读集合
这篇文章写的不好,可能真的是由于本人知识积累的有限,写的很艰难,不过最终还是写好了,继续加油把!