【问题标题】:Pattern for UI: Same object, displayed differentlyUI 模式:相同的对象,不同的显示
【发布时间】:2008-12-18 21:44:59
【问题描述】:

我有一个将序列号输入数据库的应用程序。序列号有一组定义它的属性,用户必须/可以提供它们来生成。

public class Serial
{
    public string Number {get; set;}
    public string Part {get; set;}
    public string MfgOrder {get; set;}
    public string CusOrder {get; set;}
    public string Note {get; set;}
    ... etc ...
}

现在,此应用程序的起点要求用户提供几条信息之一(例如零件编号或制造订单等)。这个起点可能已经填写了一些需要的用户输入。然后我想取那些已知的项目并根据它们改变形式。

例如。如果两条信息是零件号和制造订单号,并且用户提供制造订单号(与数据库中的零件号有关系)我想显示这些值但不允许它们是编辑。相反,如果用户只给我一个零件号,我希望允许将制造订单显示为一个文本框,旁边有(可能)可选或必需。

public class MfgOrder
{
    public string MfgOrder {get; set;}
    public string Part {get; set;}
}

...

MfgOrder order = new MfgOrder(some_user_value); // queries database, returns populated object
Serial serial = new Serial() {
    MfgOrder = order.MfgOrder,
    Part = order.Part
};

这个应用程序现在可以通过 UI 中的 if/then 条件运行——如果你给了我一个制造订单,以这种方式显示它,如果你给我别的东西,就以这种方式,等等。问题是否已经请求了几个新选项,并且不断链接 if/then 语句变得非常丑陋。

if(serial.comes_from_mfgOrder == true)
{
    %>Manufacturing Order: <%=serial.MfgOrder %><%
} else if (serial.comes_from_part_number == true) {
    %>Manufacturing Order: <%=Html.Textbox("MfgOrder")%><%
} else if // continue this for way too long now ...

这里有好的设计模式吗?

谢谢!

【问题讨论】:

    标签: c# asp.net-mvc user-interface design-patterns


    【解决方案1】:

    【讨论】:

    • 我没有完整阅读链接,所以我可能会错过重点,但我同意将其移至助手绝对是我无论如何都应该做的事情。问题是如果可能的话,我仍然想用更优雅的解决方案替换一系列 if/then 语句。
    • 嗯,我在您展示的示例中遇到的最重要问题不是 if 的数量,而是它似乎将业务逻辑放入视图中。相反,模型应该指定哪些字段是必需的,视图应该服从它。 Ifs 本身很好。
    • 我同意。我想在模型中定义所有这些,但不是实际的“串行”模型,这可能就是我遇到这种心理障碍的原因。
    • 我不喜欢 if 的原因是,每当我添加一个新的“起点”时,我都必须重新定义每个条件语句。相反,如果它在模型中,我会为新的“起点”编写一个新模型,并且视图会相应地采取行动。
    • 对。为视图使用数据传输对象,而不是直接传递实体。 DTO 可以具有配置 Serial 没有的视图的属性。您可以使用 LINQ“即时”创建 DTO。
    【解决方案2】:

    我相信您正在寻找的模式是模型视图控制器或 MVC。

    http://www.dotnetheaven.com/Uploadfile/rmcochran/MVC_intro02012006001723AM/MVC_intro.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 2019-01-22
      • 2012-08-13
      相关资源
      最近更新 更多