5

最初有我的 BO 调用信息然后传递给 UI 的 DAL 对象。然后我开始注意到 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

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

Public Class OrderController

    Private Shared _orderDAL as new OrderDAL

    Public Shared Function GetOrder(id) As Order

        Return _orderDAL.GetOrder(id)

    End Function

End Class

然后在我的应用程序中

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

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

Dim _orderDAL as New OrderDal

_orderDAL.GetOrder(1234)

.....

你怎么看?

谢谢

4

5 回答 5

4

我认为这本优秀的书中列出了几种替代方案:企业应用程序架构模式。您可能感兴趣的一些模式:

于 2008-09-30T04:54:01.660 回答
0

好吧,您的应用程序不应该实例化数据访问层的单独版本,因此您可以控制它。您发布的 Psuedo 代码确实很难阅读。

问题是,你的数据访问层是什么,有多少?这将决定你做什么。如果你坚持到一个文件,那么我认为你写的很好,如果你需要与系统中的其他控制器共享它,可以将项目包装成一个 singelton(颤抖)。

如果你真的在做订单处理并持久化回数据库,我个人认为是时候看看 ORM 了。这些包将为您处理 CRUM 方面并减少您必须维护的项目数量。

我的 $.02,一旦我看到更好的例子,我保留修改我的答案的权利。

于 2008-09-30T04:51:16.923 回答
0

我不能谈论 VB 细节,因为我不是 VB 开发人员,但是:

您正在做的是一个行之有效的良好实践,将 GUI/表示层与数据层分开。在 GUI 事件方法中包含真实的应用程序代码是一种(可悲的是也很成熟的)不好的做法。

您的控制器类类似于桥接模式,如果两个层都能够在其他层不知道的情况下更改它们的形式,这也是一个好主意。

前进!

于 2008-09-30T05:07:56.977 回答
0

这是一个很好的实践——尤其是当你到达控制器需要做的不仅仅是简单地委托给底层 DAL 的时候。

于 2008-09-30T07:59:19.047 回答
0

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

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

OrderControllerFactory.ConfiguredOrderController().GetOrder(42);

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

public interface IOrderController
{
    Order GetOrder(int Id)
}

public class OrderController: IOrderController
{
    public Order GetOrder(int Id)
    {}
}

public class OrderControllerFactory()
{
    public IOrderController ConfiguredOrderController()
    {}
}

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

于 2008-09-30T08:26:37.263 回答