在这种情况下哪个更好?可重用性或冗余性

时间:2012-05-28 06:27:15

标签: design-patterns language-agnostic

我有一个页面,用户可以根据产品ID查看产品详细信息。管理员也可以看到同一页面。我有一个模板来渲染html。

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

案例1:通过添加条件使用相同的模板,以便根据用户显示内容
优点
1)当我们需要修改模板或主题时,它很容易 2)可重用性

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

通过修饰基础,您可以避免管理部分中的错误影响用户。因此,您在添加功能时保留了可重用性。

答案 1 :(得分:1)

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

示例:Abstract Factory

答案 2 :(得分:0)

你应该有这样的设计:
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.

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