面向对象软件开发的十大原则 (转二)
当定义方法的参数时,一定要使它们可以扩展。例如,下面这行代码是不可扩展的:
Public Function PlaceOrder(sLastName as String, sFirstName as String, sAddress as String)
要想调用这个方法你必须传递这3个参数。但是如果你以后决定在定单上还需要电话号码,就必须修改函数签名,这就破坏了兼容性以及每个调用此方法的代码段。为了防止这个问题的发生,一个更好的解决方法是:在一个容器中传递参数。你可以使用记录集、变量数组或 XML字符串来传递更普通的参数。
当转移到.NET时,这个技巧就不是十分必要了,因为在.NET中你可以进行函数装载,这样就可以具有两套不同参数的同一个函数:
Public Function PlaceOrder(sLastName _
as String, sFirstName as String, sAddress as String)
Public Function PlaceOrder(sLastName _
as String, sFirstName as String, _
sAddress as String, sPhone as String)
6. 现在就使用XML
XML提供了一个管理状态和在应用程序的组件之间传递它的很好方法。 你可以用任何喜欢的格式来定义XML,然后可以从XML字符串插入、更新、删除或回顾任何信息。
XML最好的一点是它的跨平台性并拥有独立的销售商。XML既不是Microsoft的技术也不是Sun的技术,是万维网联盟W3C控制着这个标准,具体细节请参见原文。
XML成为了.NET中的数据存取标准,所以现在就使用会使你一路领先。
7. 定义灵活的界面
界面(Interfaces)提供了一个在运行时间插入组件的很好途径。你可以定义一个界面,建立一个执行它的类,然后就可以在任何时间,很容易地用任何执行同一界面的其它类来代替这个类。
例如,你可以开发一个邮件列表的标签打印组件,并且定义这个组件所要求的标准界面。在这个例子中,那个界面包括名字和地址信息。然后,任何执行这个界面的类都可以使用这个组件,而不需要对其进行任何修改。一个执行标签打印界面的客户类可以使用这个组件来打印客户邮件标签,一个执行标签打印界面的职员类可以使用这个组件来打印薪水标签等。
8. 继承功能
继承是OOP的一个关键原则,它允许你定义一个对象的基础功能,然后将那个功能应用于对象的特定子类中。
例如,你可以为一个客户(Customer)对象定义基础功能,可以恢复和保存数据以及计算一个折扣。然后就可以定义一个政府客户对象,让它继承客户对象的所有功能,但是屏蔽掉折扣计算,因为给政府客户的折扣更高。
在VB.NET中,你很快就能实现这些。
9. 按照模型进行处理
开发一个描述交易的域模型对于理解应用程序的目的以及它应该解决的问题是非常有用的。 但是有一个常见的错误是取得域的模型并试图为它编码。相反,你应该融合域模型到一个执行模型中,这个执行模型定义了如何建立类的方法。融合过程中,需要考虑许多因素,请参阅建立对象模型。
10. 了解OOP,使用OOP
所有的.NET都是面向对象的。现在你对OOP了解得越多,理解得越好,将来转移到.NET就越容易。在所有项目中都要准备好使用类模型。如果你不了解OOP,或者虽然你了解它但是并不真正理解它,可以采用一个OOP类。OOP技术很快就会成为你的第二个自我,你会发现想记起原来是怎么编码的都很困难。