关于Dao层的设计我现在也还是有点模糊,大大小小的项目也做了五六个了,负责的数据库设计也有三四个了。
在对Dao层进行设计时采用过两种方案:
方案一:每一表对应一个Dao类(接口也可),每个Dao将完成对该表的增删改查以及业务上要求的查询操作。这么设计的话如果表很多的话将会产生很多类,并且将会出现大量重复的代码,因为每一个Dao中都将涉及到基础的增删改查。
方案二:写一个基础的类,可以完成基本的增删改查,其他的对于业务上有额外需求的表单独在写一个类,不过这个类只包括额外的功能。这里的基础类写的时候是需要严格注意的,因为采用的类似映射的实现,需要你把实体类设计的同表结构一摸一样,因为在该类中对数据库的增删改查的Sql语句就是通过对实体类类名以及对实体类类中属性的提取完形成的。
这里给出一个基本的添加方法(vb.net实现):
Public
Class SqlDao :
Implements Dal.
IDao
Private SqlDr As SqlDataReader
Private SqlCon As SqlConnection
Private SqlCmd As SqlCommand
'从配置文件app.config中取得连接数据库的字符串
Private strConnect As String = ConfigurationManager. AppSettings ( "strCon" )
'得到类名
Private strClassName As String
'得到类的类型
Private mType As Type
'得到属性集
Private mProS As PropertyInfo ( )
'在初始化方法中连接数据库
'Public Sub Init(ByVal obj As Object) Implements IDao.Init
' SqlCon = New SqlConnection(strConnect)
' '在构造函数中对必要类型进行初始化
' strClassName = TypeName(obj)
' mType = obj.GetType()
' mProS = mType.GetProperties
'End Sub
'连接数据库的一个私有方法
Private Function GetCon ( ) As SqlConnection Implements IDao. GetCon
Try
If (SqlCon. State =</
Private SqlDr As SqlDataReader
Private SqlCon As SqlConnection
Private SqlCmd As SqlCommand
'从配置文件app.config中取得连接数据库的字符串
Private strConnect As String = ConfigurationManager. AppSettings ( "strCon" )
'得到类名
Private strClassName As String
'得到类的类型
Private mType As Type
'得到属性集
Private mProS As PropertyInfo ( )
'在初始化方法中连接数据库
'Public Sub Init(ByVal obj As Object) Implements IDao.Init
' SqlCon = New SqlConnection(strConnect)
' '在构造函数中对必要类型进行初始化
' strClassName = TypeName(obj)
' mType = obj.GetType()
' mProS = mType.GetProperties
'End Sub
'连接数据库的一个私有方法
Private Function GetCon ( ) As SqlConnection Implements IDao. GetCon
Try
If (SqlCon. State =</