处理if / else语句的最佳方法

时间:2014-01-13 11:34:13

标签: coldfusion coldfusion-10

如果您有一个向用户显示大量信息的页面(例如客户帐户详细信息),并且此信息需要根据查看页面的人(例如经理,销售人员)而有所不同,我想知道最好的/编写条件逻辑的有效方法。

例如,我有一个div,列出了所有客户的个人信息:

<cfif #User.Type# EQ "Sales"> // sales guy view
<div id="peronsonalinfo">
    <ul>
    <li>Forename Surname</li>
    <li>Address</li>
    <li>Account Status</li>
    <li>Account Manager</li>
    ..... etc etc
    </ul>
    </div>
(continues below)

以上情况适用于销售人员,因为他不允许对帐户进行更改。但是经理被赋予了编辑权,所以他需要得到这个。

<cfelseif #User.Type# EQ "Manager">
<div id="peronsonalinfo"> // manager view
    <form action="accountedit.cfc">
        <ul>
        <li> <input type="text" value="Forename Surname" /> </li>
        <li> <textarea value="Addres"></textarea>           </li>
        <li> <input type="text" value="Account status" /> </li>
        <li> <input type="text" value="Account manager" /> </li>
        ..... etc etc
        </ul>
    </form>
        </div>
    </cfif>

请原谅减少的代码。可能会有帐户状态和客户经理字段的下拉选择元素。我想说的是,根据你的身份,有两个相同信息的HTML版本。

编写这种逻辑的最佳方法是什么。我这样做的方式似乎是重复代码所以我能想到的唯一其他选择是围绕每个元素都有语句,就像这样吗?

 <form>
          <ul>
            <li>
              <cfif #User.Type# EQ "Sales">
                Forename Surname
                <cfelseif #User.Type# EQ "Manager">
                <input type="text" value="Forename Surname" />
              </cfif>
            </li>
            <li>
              <cfif #User.Type# EQ "Sales">
                Address
                <cfelseif #User.Type# EQ "Manager">
                <textarea value="Addres"></textarea>
              </cfif>
            </li>
            <li>
              <cfif #User.Type# EQ "Sales">
                Account Status
                <cfelseif #User.Type# EQ "Manager">
                <input type="text" value="Account status" />
              </cfif>
            </li>
            <li>
              <cfif #User.Type# EQ "Sales">
                Account Manager
                <cfelseif #User.Type# EQ "Manager">
                <input type="text" value="Account manager" />
              </cfif>
            </li>
          </ul>
          <cfif #User.Type# EQ "Manager">
            <input type="submit" value="submitform">
          </cfif>
        </form>

现在我在想谁在这些代码中得到了什么?有什么方法可以做到这一点并拥有高效的代码?我在我的Web应用程序服务器上使用ColdFusion 10,但我想这个问题可能适用于任何语言。

1 个答案:

答案 0 :(得分:5)

有两种观点:一种是只读的,一种是可编辑的。根据安全性决定使用哪个。不要试图在视图中结合安全性考虑因素。

再次,按照your other thread:你不是简单地使用MVC框架来管理这一切,而是重新发明轮子(最后是六边形)。

这篇文章 - “Unit Testing / TDD - why you shouldn't bother” - 这里不是你问题的主题(虽然你 使用TDD,对吗?或者至少是单位测试你的所有工作),但是“题外话”当然是。