【问题标题】:Facade pattern for asp.net mvc aplicationasp.net mvc 应用程序的外观模式
【发布时间】:2011-06-28 14:34:46
【问题描述】:

我有一个包含以下类的 MVC2 应用程序:

-订单模型

-LineOrderModel

-订单控制器

-LineOrderController

在 OrderController 类中,我正在回忆 Web 表单的一些值。到目前为止,我在 Controller 中创建了每个订单行(LineOrderModel 类)和 OrderClass 的实例。

我试图创建一个 OrderFacade 类,以便封装创建订单时要做的不同事情。

所以在那个类中我创建了一个这样的方法:

public void saveOrder(int idProvider,decimal? price)
        {
            // Here I create instances of OrderModel and LineOrderModel
            // and assign their properties
        }

但我的问题是我不知道如何传递从网络表单中捕获的所有订单行。

我认为创建一个带有 orderLines 类的 List 并将其传递给该方法是没有意义的(因为这样做的目的是使用 Facade,而不是直接使用该类)

我如何将不同的行(都具有 numberUnits、idProduct ... 等属性)封装到一个通用对象列表中,每个对象都具有这些属性?

可能类似于List<List<object>>

提前致谢!

【问题讨论】:

    标签: asp.net asp.net-mvc-2 design-patterns facade


    【解决方案1】:

    听起来你不需要外观。如果您在业务逻辑和应用程序逻辑(控制器)之间使用数据传输对象(DTO),Facade 将是一个不错的选择——在这种情况下,DTO 也可以是视图模型(我猜正统的 MVC 开发人员不会喜欢这个想法)。 Facade 会采用 DTO 并将它们转换为一些业务或领域对象。

    但在您的场景中,您只需将数据直接填充到模型类中 - 这是视图模型类在视图和控制器中使用它们的目的。使用任何类型的属性包将数据从控制器传输到业务逻辑都不是一个好的解决方案。

    【讨论】:

    • 感谢您的回复。那么,如果我没记错的话,在这种情况下,控制器正在执行外观任务吗?如果有一天我想制作一个使用这些服务的移动应用程序怎么办?有一个独立于客户端接口工作的中间层(外观)会不会有帮助?
    • @Msam:是的,它会有所帮助,但在这种情况下,您仍然需要在应用层(控制器)和中间层之间传输一些日期。您将直接发送实体或 DTO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多