【问题标题】:ASP.Net MVC vs ASP.Net for Complex workflows用于复杂工作流的 ASP.Net MVC 与 ASP.Net
【发布时间】:2010-06-02 02:49:02
【问题描述】:

我刚刚开始参与将带有 InfoPath UI 的一系列复杂工作流迁移到基于 Web 的 UI。我是 ASP.Net MVC 的新手,但已开始将其作为技术与经典 ASP.Net 进行评估。

与大多数工作流一样,每个州都有许多业务规则来确定 (a) 谁可以查看哪些内容; (2) 谁可以编辑什么内容; (3) 用户操作选项可能是什么(编辑;拒绝;批准)等。本质上,在呈现适当的视图之前,需要对每个请求应用很多逻辑。在 ASP.Net 方面更有经验,我知道可以通过页面后面的代码(启用/禁用/隐藏字段)轻松实现所需的表单。我还没有看到如何使用 ASP.Net MVC 来实现这一点(但我意识到在使用 MVC 时需要我的新思维 - “只提供特定视图上的内容 + 有限的用户操作选项”)。

因此,如果使用 ASP.Net MVC,看起来我需要创建很多视图。每个视图中的大部分内容都是相同的。在大多数情况下,对于每个状态的这些视图,只有字段启用状态或按钮会有所不同。例如:Step01Initiate(‘有保存’按钮); Step01OriginatorView(有“编辑”按钮); Step01OriginatorEdit(有“保存”按钮); Step01Review(有“接受”/“拒绝”按钮); Step01ReviewReject(用于审阅者注释;具有“保存”/“取消”按钮)。对于多达六个状态的工作流,这将产生大量视图。我可以看到选择 ASP.MVC 的优势(1)在内容方面“瘦”视图; (2) 在控制器和不同模型中进行逻辑整合。

我在应用 MVC 方面是否沿着正确的路线思考——“大量的观点”?还是有更好的方法来实现我的目标(使用 ASP.Net MVC 或经典 ASP.Net)?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    我肯定会为此使用 ASP.NET MVC。有了这么多的业务逻辑,我建议它带来的分离的关注点将使开发和可维护性更容易。

    虽然更改页面以使其看起来像不同的页面(删除/添加按钮等)确实有效,但在可维护性方面我越来越不舒服,因为它紧密耦合了 UI 和逻辑.在我看来,使用视图和控制器是一种更好的方法。

    在您的情况下,您将有一个控制器,每个步骤都有不同的操作。这些操作中的每一个都将返回一个适合用户的视图。

    【讨论】:

    • 非常好 - 谢谢大卫。这确实有助于引导我朝着 ASP.MVC 方向发展。
    【解决方案2】:

    我刚刚花了一些时间在一个类似的应用程序上工作。我的第一个建议是尽可能多地从应用程序中获取工作流内容并进入Windows Workflow 运行时。它将为您节省很多手动管理状态等的痛苦和烦恼。AppFabric 最近已发布/宣布(RTM 是六月)。您可以使用它来托管您的所有工作流,它会为您处理持久性等问题。

    虽然 ASP.NET 视图很薄,但您可以在其中包含条件逻辑(在一定程度上)。然后,您可以将当前用户所在的角色放入您的视图模型中。然后在您的视图代码中,您可以检查用户是否处于特定角色,并基于此呈现/排除部分。您还可以使用 RenderAction 之类的东西来分解视图的常见部分,以避免大量复制/粘贴编程。

    您的代码如下所示:

    <!-- common html here -->
    
    <% if(  model.UserRole.InRole( [some role] ) ) { %>
        <input type="button" />
    <% } %>
    

    太多可能会导致标签汤(and there are ways to clean it up),但听起来您将被限制为用户能够执行的少数操作。

    另一种选择是将可用操作的列表传递到视图中,然后循环遍历它们并渲染教学。这会将用户角色/等管理的问题完全排除在视图之外,并将该逻辑进一步移动到您的业务层(它可能属于该层)。

    【讨论】:

    • 感谢您的帮助。很棒的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多