学习.net设计规范记录
学习.net设计规范记录
1.不要在一个文档中包含1个以上的公用类型,除非不同之处仅在于泛型参数的数量。
2.要用相同的名字来命名源文件及其包含的公用类型。
3.要用相同的层次结构来组织文件目录和名字空间。
4.分组成员。
Event designer
2008年11月23日
10:53
要用 system.EventHandler<T> 来定义事件处理函数。
要使用EventArgs 的子类。
要使用受保护的虚函数来触发事件。
param : e;
EventHandler<some eventargs> handle = some event;
if(handle ! = null )handle(this,e);
类型设计
2008年11月25日
9:27
1.要确保,高内聚,一个类要可以用一句话来描述。
如果事情变得复杂了,那么就定义更多的类型。
成员设计
2008年11月25日
9:27
- 重载
- 要允许可选参数为Null;
- 属性和方法之间的选择
- 多使用属性控制方法的语义,使用较少的方法:可以减少方法重载的数量。
- 方法表示操作,属性表示数据,这个是设计的依据:要考虑使用的场景,如Article.HasComplelted 这个并不是 article的 attribute,所以要使用HasComplelted();
- 要使用属性,如果值保存在内存中,并且属性的目的就是访问这个值。
- 要使用方法,如果该操作的速度比直接访问字段慢很多:如果不止是单纯的获取值,还包含一定的处理,那么应该使用方法,因为有可能每次都返回一个内部对象的副本,那么如果设计为属性,就会效率很低,设计为方法就很好的表示了,有可能调用的时候要在本地保存这个副本。
- 基本原则就是:用属性来表示只涉及简单计算的简单数据。
- 属性设计
- 属性相比方法更智能,更灵活。
- 不要让,set的范围>get的范围。
- 要注意提供默认值。
- 要允许用户以任意顺序设置属性的值。即使会导致暂时的无效状态:这个情况是很常见的,设置属性的值的时候只是提供了基本的验证,必须提供某种形式的方法来显示地提交。所以不要让属性有设置的顺序。
- 避免在属性的获取方法中抛出异常。!!!属性的获取方法通常应该是简单的操作。
- 通常应该把属性的改变通知事件设计在高层的api中。
- 构造函数的设计。
- 要把构造函数的参数用作设置主属性的便捷方式。应该和无参的构造函数+后续设置属性 没有任何区别。:这个是为什么呢,只读属性怎么办,如果有一些不希望用户更改的怎么办。
- 在构造函数中尽量少做事儿,lazy load..
- 要从实例构造函数中抛出异常。
- 参数设计。
- 要使用类层次结构中,最接近基类的类型来作为参数。降低耦合性。减少调用类所需要掌握的信息量。
- Enum 和 boolean的选择。
- 要使用enum,如果方法中有2个以上的boolean。
- enum的扩展性要远远好于boolean,所以要多考虑扩展性。
- 如果一般是通过构造函数设置的,那么enum. 如果是通过属性设置的,那么可以使用boolean。
- 参数的验证
- 要在调用栈的底层(底层的api)验证,所有直接暴露给用户的成员都需要验证。
- 枚举要使用特定范围的验证。:因为枚举的值很可能是强制转换的,是无效的,必须对其验证,而且要使用特定范围的验证,这样可以更准确。
可见性设计
2008年12月12日
10:10
- 类成员可具有五种已声明可访问性中的任何一种,默认为 private 已声明可访问性。(请注意,声明为类成员的类型可具有五种已声明可访问性中的任何一种,而声明为命名空间成员的类型只能具有 public 或 internal 已声明可访问性。)
源文档 <file:///F:\book\基本功\C%23%20Language%20Specification%201.2.doc>
在下面的示例中
public class A
{
public static int X;
internal static int Y;
private static int Z;
}
internal class B
{
public static int X;
internal static int Y;
private static int Z;
public class C
{
public static int X;
internal static int Y;
private static int Z;
}
private class D
{
public static int X;
internal static int Y;
private static int Z;
}
}
类和成员具有下列可访问域:
- A 和 A.X 的可访问域无限制。
- A.Y、B、B.X、B.Y、B.C、B.C.X 和 B.C.Y 的可访问域是包含程序的程序文本。
- A.Z 的可访问域是 A 的程序文本。
- B.Z 和 B.D 的可访问域是 B 的程序文本,包括 B.C 和 B.D 的程序文本。
- B.C.Z 的可访问域是 B.C 的程序文本。
- B.D.X 和 B.D.Y 的可访问域是 B 的程序文本,包括 B.C 和 B.D 的程序文本。
- B.D.Z 的可访问域是 B.D 的程序文本。
如示例所示,成员的可访问域决不会大于包含它的类型的可访问域。例如,即使所有的 X 成员都具有公共级的已声明可访问性,但除了 A.X 外,所有其他成员的可访问域都受包含类型的约束。
源文档 <file:///F:\book\基本功\C%23%20Language%20Specification%201.2.doc>
注释设计
2008年12月12日
10:24
有待研究