OOP模式设计(数据访问)的常用方法是什么?

Sai*_*han 5 oop design-patterns multi-tier

最初有一个DAL对象,我的BO呼叫信息,然后传递给UI.然后我开始注意到UI中的代码减少,并且有Controller类.什么是体面的推荐.

我目前正在构建我的

Public Class OrderDAL

    Private _id Integer
    Private _order as Order

    Public Function GetOrder(id as Integer) as Order

        ...return Order

    End Function

End Class
Run Code Online (Sandbox Code Playgroud)

然后我有控制器类(最近实现了这种风格)

Public Class OrderController

    Private Shared _orderDAL as new OrderDAL

    Public Shared Function GetOrder(id) As Order

        Return _orderDAL.GetOrder(id)

    End Function

End Class
Run Code Online (Sandbox Code Playgroud)

然后在我的申请中

My app Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        msgbox(OrderController.GetOrder(12345).Customer.Name)

    End Sub


End app
Run Code Online (Sandbox Code Playgroud)

我最初发现使用共享类时,无论何时需要获取数据,我都不必继续创建DAL的新实例

Dim _orderDAL as New OrderDal

_orderDAL.GetOrder(1234)

.....
Run Code Online (Sandbox Code Playgroud)

你有什么看法?

谢谢

Skl*_*vvz 0

我过去使用过你的解决方案,我面临的唯一问题是“共享”或“静态”方法不支持继承。当您的应用程序增长时,您可能非常需要支持不同类型的“OrderController”。

理论上,支持不同 OrderController 的既定方法是创建一个工厂:

OrderControllerFactory.ConfiguredOrderController().GetOrder(42);
Run Code Online (Sandbox Code Playgroud)

这里的问题是:“ConfiguredOrderController()”返回什么类型?因为它必须具有静态“GetOrder(int id)”方法——而继承或接口不支持静态方法。解决这个问题的方法是不要在 OrderController 类中使用静态方法。

public interface IOrderController
{
    Order GetOrder(int Id)
}

public class OrderController: IOrderController
{
    public Order GetOrder(int Id)
    {}
}
Run Code Online (Sandbox Code Playgroud)

public class OrderControllerFactory()
{
    public IOrderController ConfiguredOrderController()
    {}
}
Run Code Online (Sandbox Code Playgroud)

因此,对控制器使用非静态方法可能会更好。