比如物件之间的协定,物件X与Y动作达成了协定,因此我们会呼叫物件X来执行Y动作
(1)事前的规划将使类别更完善
(2)较佳的类别版本控制取向,每一个版本都是为一个新的协定
(3)有助于团队的开发
i Programming in the Large
ii 使子系统/团队都遵守相同的协定
(4)使用起来较有弹性,不管现在或未来,类别X都可以和遵守协定的类别互动
a代表用户端与伺服端之间的协定
b不包含资料及任何实作的程式码
c用户端(要求服务的物件),透过接口与伺服端沟通
d伺服端(根据接口协定,提供服务的物件),伺服端中实作接口以满足协定
a用户端的程式码将和使用的资料库脱钩
b允许我们建立泛用的资料存取程式码
(1)当不同的类别均支援相同的操作时
a只需要学习一种物件模型,就可以使用不同的类别
b使用起来更方便且具有弹性
(2)使用接口轻易就可实作多型
ADO.Net为资料类别提供了许多介面:
i IDataReader
ii IDataAdapter
iii IDbConnection
iv IDbCommand
v IDbDataAdapter
a资料元件可跨不同的资料库使用
b某些资料元件特有的功能将隐藏在介面里头,仍然可以存取,但将破坏其泛用性
实作方式:透过物件产生器隐藏真正使用的型别
Imports db=System.Data.OleDb
Public Class DataAccess
…
dim dbConn as System.Data.IDbConnection
dbConn=me.CreateConnection()
dbConn.Open()
End Class
Private Function CreateConnection() as System.Data.IDbConnection
return New db.OleDbConnection("…")
End Function
Private Function CreateCommand(…) as System.Data.IDbCommand
return new db.OleDbCommand(sql,dbConn)
End Function
当资料来源异动时,只需要更改物件产生器——泛用,多态
a在资料元件中的程式码仍然不变
Private Function CreateConnection() as System.Data.IDbConnection
return new ss.SqlConnection("…")
End Function
Private Function CreateCommand(…) as System.Data.IDbCommand
return new ss.SqlCommand(sql,dbConn)
End Function
b继承