【问题标题】:which is better in this case? re-usability or redundancy [closed]在这种情况下哪个更好?可重用性或冗余[关闭]
【发布时间】:2012-05-28 06:27:15
【问题描述】:

我有一个页面,用户可以在其中看到基于产品 ID 的产品详细信息。管理员也可以看到相同的页面。我有一个模板来呈现 html。

管理员将对该页面拥有更多控制权,例如,他可以编辑、删除等等。 用户可以看到并购买。

案例一:使用同一个模板,添加条件,根据用户展示内容
优点
1) 当我们需要修改模板或主题时,它很容易。
2) 可重用性

缺点
1)当有很多条件并且需要大量时间来调试任何问题时,它变得复杂。
2) 该模板中的任何错误都会影响管理页面和用户页面。

案例 2:使用不同的模板
优点
1) 有很多复杂条件时,这很容易。
2)它使代码独立。管理模板中的错误不会影响用户模板

缺点
1)当我们必须修改模板或主题时,这是一个问题。 (额外的依赖)

哪个是更好的选择?什么是正确的策略?

应该根据复杂性进行自适应吗?我想看看你对此的看法。

【问题讨论】:

    标签: design-patterns language-agnostic


    【解决方案1】:

    我将创建一个包含用户和管理员之间重叠的共享库。然后,使用装饰器模式添加管理功能。

    通过装饰底座,您可以避免管理部分中的错误影响用户。因此,您可以在添加功能的同时保持可重用性。

    【讨论】:

    • 是的,这是我最喜欢的一个选项。 Symfony2 php 框架也使用相同的设计模式。
    【解决方案2】:

    为什么不使用 Factory 或 Abstact Factory 模式来解决此类问题...因为这两种模式处理对象系列...并降低复杂性并使您的代码易于维护...

    例如:Abstract Factory

    【讨论】:

    • 我正在调查它。感谢您的建议
    • @Venu - k,欢迎......
    【解决方案3】:

    你的设计应该是这样的:
    1. 假设您的产品页面有 2 个按钮
    2.购买按钮-普通用户
    3. 运送物品按钮 - 对于管理员
    4. 现在显示此按钮不应该取决于用户是否是管理员,而是取决于您是否要在该页面显示该组件

    你应该有 PageModel 具有 2 个布尔属性的类

    boolean showPurchaseButton
    boolean showShipButton
    

    您应该只有一个模板/页面创建代码。 在模板类中, 你应该像这样向页面添加组件:

    if(showPurchaseButton){
    //add purchase button to template
    }
    if(showShipButton){
    //add ship button to template
    }
    

    在创建页面时,您可以像这样根据用户填充 PageModel:

    //common user
    PageModel model = new PageModel()
    model.setshowPurchaseButton(true);
    model.setshowShipButton(false);
    
    //for admin user
    PageModel model = new PageModel()
    model.setshowPurchaseButton(false);
    model.setshowShipButton(true);
    
    //while creating your template pass this model to it.
    

    这样您就可以灵活地将尽可能多的组件添加到您的模板中。 并且调试也将变得容易,因为在页面模型中填充值时,您会知道您为哪个用户显示了哪些组件。这部分代码将充当您的控制面板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-17
      • 2016-12-24
      • 2019-09-26
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多