我正在尝试重构现有的WinForms应用程序以首次使用Model-View-Presenter(MVP)模式,以便随后编写单元测试。我有很多像下面这样的现有代码,它没有UI / View的问题,但是我需要为此验证功能编写单元测试,而实际上不会引起数据库调用。我应该如何将其分为Model vs Presenter类?我不确定如何从中提取模型类:
Friend Sub ValidateAmountNotEntered(exp() As String, paramString As String, exp2() As String, paramString2 As String)
Dim SqlStmt As String = "[Long complex parameterized query to
Select values From 4 tables (T1 T2 T3 T4)
Where T1.Column1 = ?
And T2.Column1 In (" & paramString & ")
And T4.Column1 In (" & paramString2 & ") ]"
Dim com As New OdbcCommand With {
.Connection = New OdbcConnection(CommonUtilities.GetODBCConnectionString()),
.CommandText = SqlStmt
}
com.Parameters.AddWithValue("?", CStr(GlngNum))
For Each parameter As String In exp2
com.Parameters.AddWithValue("?", parameter.Replace("'", String.Empty))
Next
For Each parameter As String In exp
com.Parameters.AddWithValue("?", parameter.Replace("'", String.Empty))
Next
Dim adap As OdbcDataAdapter = New OdbcDataAdapter(com)
Dim rsRates As New DataSet("dsl")
adap.Fill(rsRates)
For Each iteration_row As DataRow In rsRates.Tables(0).Rows
AddErrorItem(iteration_row.Item("T1.Column1"), "R", "Amount for " & iteration_row.Item("T4.Column1").Trim() & "; " & iteration_row.Item("T3.Column1").Trim() & " not entered")
Next iteration_row
End Sub
任何人都可以指导或提供示例吗?
您可以提取一个专用的数据访问层,该层执行与数据库的所有交互。然后,您可以在更高层的任何测试中模拟该DAL。例如,如果您具有一个DataAccess
类,该类具有一个GetData
方法,该方法返回从数据库填充的DataTable
,则对业务逻辑的测试可以模拟该类的该方法并返回一个固定的DataTable
,因此不需要数据库访问。
模型就是数据本身。如果您使用的是标准ADO.NET,则不需要专用模型,因为您已经在使用DataTables
,可能还使用了DataSets
。您可以选择创建自己的专用模型类,然后在它们与DataTables
之间进行映射。
然后,演示者是数据访问层和演示层之间的代理。它只是在视图和数据访问层之间移动数据。