目前我正在尝试在 vb.net 中创建一种模型,可用于创建/获取数据库条目。
我创建了一个带有共享函数的主类模型来获取数据集,例如模型.find().
现在我想创建继承主模型类的类,例如为用户提供单独的一个: UserModel.find() => "SELECT * FROM users"。
我现在需要的是找到一种方法来告诉类它应该使用哪个表。我想到了一个抽象字符串“表”,它是每个“子模型”中的常量,但是由于不可能覆盖共享成员,因此如何实现呢?
提前致谢!
Edit:也许这会让我的意思更清楚:
Public Class Model
Public Shared _controller As Controller
Public Shared table As String
Protected Shared tableFields As String()
Shared reader As Npgsql.NpgsqlDataReader
Public Shared Function find()
Dim a As ArrayList = New ArrayList
'Test if the tablefields are already known to the class, if not, get them
If tableFields Is Nothing Then
getTableFields()
End If
Dim query As String = "SELECT " + String.Join(", ", tableFields) + " FROM " + table
reader = _controller.executeReader(query)
While reader.Read
o = New Model
Dim v As New Hashtable
For Each field In tableFields
v(field) = reader(field)
Next
o.values = v
a.Add(o)
End While
reader.Close()
Return DirectCast(a.ToArray(GetType(Model)), Model())
End Function
Public values As Hashtable
Public Sub New()
End Sub
End Class
所以我想要一个共享方法,它可以查找所有数据库条目并返回其自己类型的实例数组,例如模型()。
这就是为什么我想保持查找方法共享而不是绑定到实例。
我想你可以使用Generics
。这里我粘贴了一个例子
您域中的所有类都可以继承自实体类
Public MustInherit Class Entity
'...
End Class
Your 模型类,用你的方法查找
Public Class Model
Public Shared Sub Find(Of T As Entity)()
' You could know the name of T to find the table
Dim tableName As String = GetType(T).Name
'...
End Sub
End Class
您的域的一类,例如:用户等级
Public Class User
Inherits Entity
' ...
End Class
最后,举一个例子你如何实例化 Find 方法
Model.Find(Of User)()
'...
我不知道这是否是你的意思,你觉得这有帮助吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)