Effective C# 原则33:限制类型的访问
2009-02-19 08:16:01 来源:WEB开发网public interface IPhoneValidator
{
bool ValidateNumber( PhoneNumber ph );
}
下一步,修改已经存在的电话验证,通过接口来实现,而且把它做为一个内部类:
internal class USPhoneValidator : IPhoneValidator
{
public bool ValidateNumber( PhoneNumber ph )
{
// perform validation.
// Check for valid area code, exchange.
return true;
}
}
最后,你可以为国际电话号码的验证创建一个类:
internal class InternationalPhoneValidator : IPhoneValidator
{
public bool ValidateNumber( PhoneNumber ph )
{
// perform validation.
// Check international code.
// Check specific phone number rules.
return true;
}
}
为了完成这个实现,你须要创建一个恰当的类,这个类基于电话号码类型类,你可以使用类厂模式实现这个想法。在程序集外,只有接口是可见的。而实际的类,就是这个为世界不同地区使用的特殊类,只有在程序集内是可见的。你可以为不同的区域的验证创建不同的验证类,而不用再系统里的其它程序集而烦扰了。
你还可以为PhoneValidator创建一个公共的抽象类,它包含通用验证的实现算法。用户应该可以通过程序集的基类访问公共的功能。在这个例子中,我更喜欢用公共接口,因为即使是同样的功能,这个相对少一些。其他人可能更喜欢抽象类。不管用哪个方法实现,在程序集中尽可能少的公开类。
这些暴露在外的公共类和接口就是你的合约:你必须保留它们。越多混乱的接口暴露在外,将来你就越是多的直接受到限制。越少的公共类型暴露在外,将来就越是有更多的选择来扩展或者修改任何的实现。
- ››限制访问SQL Server的客户端IP地址
- ››Effective C# 原则40:根据需求选择集合
- ››Effective C# 原则41:选择DataSet而不是自定义的...
- ››Effective C# 原则42:使用特性进行简单的反射
- ››Effective C# 原则43:请勿滥用反射
- ››Effective C# 原则44:创建应用程序特定的异常类
- ››Effective C# 第6章:杂项
- ››Effective C# 原则45:选择强异常来保护程序
- ››Effective C# 原则47:选择安全的代码
- ››Effective C# 原则48:了解更多的工具和资源
- ››Effective C# 原则49:为C#2.0做好准备
- ››Effective C# 原则50:了解ECMA标准
更多精彩
赞助商链接