我正在实现一个数据访问层(DAL),它基本上是一组具有(VB.NET)实现执行数据库(CRUD)调用的共享函数的类.我试图找出在类层次结构中调用DAL的最佳位置.让我举个例子.
假设我有一个Customer类,只有标准ID,Name,Address1等属性,可能还有一个重写的ToString函数.我还有一个带有共享方法的DAL类,例如:
(pseudocode)
Namespace Dal
Public Class Customer
Public Shared Function Read(id As Integer) As Customer
Public Shared Function ReadList() As List(Of Customer)
Public Shared Sub Create(c As Customer)
'etc.
Run Code Online (Sandbox Code Playgroud)
现在,我可以从表示层调用Dal,如下所示:
Me.DataGridView1.Datasource = Dal.Customer.ReadList
Run Code Online (Sandbox Code Playgroud)
但是,让表示层完全了解Dal是不是一个好习惯?我应该把方法放在Customer对象中并调用Dal,就像这样吗?
Public Function ReadList() As List(Of Customer)
Return Dal.Customer.ReadList()
End Sub
Public Sub Create()
Dal.Customer.Create(Me)
End Sub
Run Code Online (Sandbox Code Playgroud)
这会是"更清洁"的OOP吗?或者,让演示文稿调用Dal,传递业务对象,如前面的示例,这是可接受的做法:
Me.DataGridView1.Datasource = Dal.Customer.ReadList
Dim c As New Customer
c.Name = "Alpha Corporation"
c.Address1 = "123 Main Street"
Dal.Customer.Create(c)
Run Code Online (Sandbox Code Playgroud)
感谢您的反馈意见.
我同意数据调用不属于 UI 层。这些仅供演示。
我认为它们正确地属于服务层。服务实现使用模型对象和持久层来实现其目标。无论是基于 XML 的 Web 服务还是本地接口,服务都是映射到用例并了解工作单元的对象。
要么将数据库调用放入单独的持久层中,要么将它们嵌入模型对象中以获得额外的面向对象的纯度。