我将asp.net MVC项目定制为仅为一位客户工作。
我需要扩展项目,以便根据需要与尽可能多的客户合作。
每个客户都可以决定是打开还是关闭某些功能 (在第一次添加新客户时在DB中定义)
我想知道最好的方法是什么:
1)使用包含所需基本功能的基本控制器,并为扩展基本控制器添加一个新控制器(针对每个新客户)。
2)只使用一个控制器并使用工厂方法模式构建每个客户(每个客户都有自己的具体类)。
3)只使用一个控制器来保存所有功能并打开或关闭功能,具体取决于数据库交换机(在第一次添加新客户时在DB中定义)
感谢
答案 0 :(得分:4)
所有这些方法都过于严格,在一定数量的新客户之后,您将要么在整个地方复制代码,要么解决一个客户不需要的代码,而是为另一个客户执行代码。
您最好将每个客户的特定要求作为通用,可重复使用的选项来实现。例如,如果一个客户有计费部分,请不要创建带有计费部分的ThatCustomerController,而是添加计费角色,添加计费控制器,然后通过该角色限制对控制器的访问。
现在可能感觉更复杂,但在一年的时间里,你会感谢它的灵活性。
非常粗略的伪代码示例:
public class GeneralController : Controller
{
public ActionResult Index()
{
// Everyone can come here
}
}
[Authorize(Roles = "Billing")]
public class BillingController : Controller
{
public ActionResult Index()
{
// Only those with the 'billing' role can come here
}
}