.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>”作为属性或返回值来表示只读集合

 

  这篇文章写的不好,可能真的是由于本人知识积累的有限,写的很艰难,不过最终还是写好了,继续加油把!

posted @ 2012-05-05 16:22  TimYang  阅读(1240)  评论(2编辑  收藏  举报