admin管理员组文章数量:1442592
从 VFP 的角度看 .NET 中的依赖注入和接口(2)
首先,我们分析一下 MyWork 类:在创建类实例时,依据传入的不同参数构建不同的数据库 ODBC 连接字符串获取有效的连接句柄并保持在类的属性中。
如果对描述进行抽象,那么 MyWork 类大致应该修改成这样:
代码语言:javascript代码运行次数:0运行复制Define Class MyWork As Custom
*!* 连接句柄属性,初始值为 -1,表示未连接
nStatementHandle = -1
*!* 存储建立连接的对象
oConnectObj = .null.
Procedure Init(tConnectObj As Custom)
This.oConnectObj = tConnectObj
This.nStatementHandle = This.oConnectObj.CreatConnection()
EndProc
EndDefine
这样,看上去 MyWork 类工作的机制就是在属性中存储一个 ConnectObj 对象,并调用其 CreatConnection() 方法建立连接,置于 ConnectObj 对象的连接方法是连接 SQL Server 还是 MySQL 亦或是其他数据库,MyWork 类是不关心的,但是只要创建 ConnectObj 实例,那么,就应该可以建立连接。
所以,我们需要针对不同的数据库创建几个类:
代码语言:javascript代码运行次数:0运行复制Define Class SQLServer As Custom
*!* 创建数据库连接
Procedure CreatConnection() As Number
Local cConnectString As String, nStatementHandle As Number
m.cConnectString = "Driver={SQL Server};UID=sa;PWD=你的密码;Server=你的IP地址;Database=你的数据库"
m.nStatementHandle = Sqlstringconnect(m.cConnectString, .T.)
Return m.nStatementHandle
Endproc
EndDefine
Define Class MySQL As Custom
*!* 创建数据库连接
Procedure CreatConnection() As Number
Local cConnectString As String, nStatementHandle As Number
m.cConnectString = "Driver={MySQL ODBC 8.0 ANSI Driver};UID=root;PWD=你的密码;Server=你的IP地址;Database=你的数据库;Port=你的端口"
m.nStatementHandle = Sqlstringconnect(m.cConnectString, .T.)
Return m.nStatementHandle
Endproc
EndDefine
Define Class Access As Custom
*!* 创建数据库连接
Procedure CreatConnection() As Number
*!* 相应的代码
Endproc
EndDefine
Define Class Oracle As Custom
*!* 创建数据库连接
Procedure CreatConnection() As Number
*!* 相应的代码
Endproc
EndDefine
Define Class PostgreSQL As Custom
*!* 创建数据库连接
Procedure CreatConnection() As Number
*!* 相应的代码
Endproc
EndDefine
......
看上去这些类似乎都是一个样子,就好像是基于一个模板创建的:
代码语言:javascript代码运行次数:0运行复制Define Class template As Custom
*!* 创建数据库连接
Procedure CreatConnection() As Number
Endproc
EndDefine
好了。到这里,基本就结束了。
最后设计的模板类,在 .NET 中被称之为接口。
MyWork 类的运行需要依赖 SQLServer类、MySQL类......在代码中将这些类实例传递给 MyWork 类的行为在 .NET 中被称之为注入。
在 VFP 中完整的代码如下:
代码语言:javascript代码运行次数:0运行复制Local ConnectString As template
m.ConnectString = CreateObject("SQLServer")
Local MyWork As MyWork
m.MyWork = CreateObject("MyWork", m.ConnectString)
? m.MyWork.nStatementHandle
Define Class MyWork As Custom
*!* 连接句柄属性,初始值为 -1,表示未连接
nStatementHandle = -1
*!* 存储建立连接的对象
oConnectObj = .null.
Procedure Init(tConnectObj As Custom)
This.oConnectObj = tConnectObj
This.nStatementHandle = This.oConnectObj.CreatConnection()
EndProc
EndDefine
Define Class SQLServer As template
*!* 创建数据库连接
Procedure CreatConnection() As Number
Local cConnectString As String, nStatementHandle As Number
m.cConnectString = "Driver={SQL Server};UID=sa;PWD=你的密码;Server=你的IP地址;Database=你的数据库"
m.nStatementHandle = Sqlstringconnect(m.cConnectString, .T.)
Return m.nStatementHandle
Endproc
EndDefine
Define Class MySQL As template
*!* 创建数据库连接
Procedure CreatConnection() As Number
Local cConnectString As String, nStatementHandle As Number
m.cConnectString = "Driver={MySQL ODBC 8.0 ANSI Driver};UID=root;PWD=你的密码;Server=你的IP地址;Database=你的数据库;Port=你的端口"
m.nStatementHandle = Sqlstringconnect(m.cConnectString, .T.)
Return m.nStatementHandle
Endproc
EndDefine
Define Class Access As template
*!* 创建数据库连接
Procedure CreatConnection() As Number
*!* 相应的代码
Endproc
EndDefine
Define Class Oracle As template
*!* 创建数据库连接
Procedure CreatConnection() As Number
*!* 相应的代码
Endproc
EndDefine
Define Class PostgreSQL As template
*!* 创建数据库连接
Procedure CreatConnection() As Number
*!* 相应的代码
Endproc
EndDefine
Define Class template As Custom
*!* 创建数据库连接
Procedure CreatConnection() As Number
Endproc
EndDefine
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent 删除依赖注入数据库对象接口连接本文标签: 从 VFP 的角度看 NET 中的依赖注入和接口(2)
版权声明:本文标题:从 VFP 的角度看 .NET 中的依赖注入和接口(2) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748045828a2797297.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论