我有一个页面,用户可以根据产品ID查看产品详细信息。管理员也可以看到同一页面。我有一个模板来渲染html。
管理员将对该页面拥有更多控制权,例如,他可以编辑,删除等等。 用户可以看到并购买。
案例1:通过添加条件使用相同的模板,以便根据用户显示内容
优点
1)当我们需要修改模板或主题时,它很容易
2)可重用性
缺点
1)当有很多条件并且花费大量时间来调试任何问题时,它变得复杂
2)该模板中的任何错误都会影响管理页面和用户页面。
案例2:使用不同的模板
优点
1)当有许多复杂的条件时,它很容易
2)它使代码独立。管理模板中的错误不会影响用户模板
缺点
1)当我们必须修改模板或主题时,这是一个问题。 (额外的依赖)
哪个更好?什么是正确的策略?
应该根据复杂性进行自适应?我希望看到你对此的看法。
答案 0 :(得分:2)
我会创建一个包含用户和管理员之间重叠的共享库。然后,使用装饰器模式添加管理功能。
通过修饰基础,您可以避免管理部分中的错误影响用户。因此,您在添加功能时保留了可重用性。
答案 1 :(得分:1)
为什么不利用Factory或Abstact 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.
这样你就可以灵活地为你的模板添加尽可能多的组件。 并且调试也会变得简单,因为当在页面模型中填充值时,你会知道为哪个用户显示哪些组件。这段代码将充当你的控制面板。