c# - MVC Controller VS 工厂方法

标签 c# asp.net-mvc asp.net-mvc-4 design-patterns factory-pattern

我有一个定制的 ASP.NET MVC 项目,仅供一位客户使用。

我需要扩展该项目,以便根据需要与尽可能多的客户合作。

每个客户都可以决定是否打开或关闭某些功能 (第一次添加新客户时在数据库中定义)

我想知道最好的方法是什么:

1) 使用包含所需基本功能的基本 Controller ,并添加一个扩展基本 Controller 的新 Controller (针对每个新客户)。

2)仅使用一个 Controller ,并使用工厂方法模式构建每个客户(每个客户都有自己的具体类)。

3) 仅使用一个拥有所有功能的 Controller ,并根据 DB 开关打开或关闭功能(第一次添加新客户时在 DB 中定义)

谢谢

最佳答案

所有这些方法都过于严格,在获得一定数量的新客户后,您要么到处复制代码,要么解决一个客户不需要但另一个客户需要的代码。

您最好将每个客户的特定要求作为通用、可重用的选项来实现。例如,如果一位客户有计费部分,则不要创建带有计费部分的 ThatCustomerController,而是添加计费角色,添加计费 Controller ,然后限制该角色对 Controller 的访问。

现在可能感觉这是一项更复杂的工作,但一年后您会感谢这种灵活性。

非常粗略的伪代码示例:

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
    }
}

关于c# - MVC Controller VS 工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27601907/

相关文章:

asp.net-mvc - AspNet Core 生成和更改电子邮件地址

ruby-on-rails - 适用于Ruby on Rails开发人员的ASP.NET MVC?

asp.net-mvc - 从 IP 地址远程访问本地 ASP.NET Core 应用程序?

asp.net-mvc - 无法在 Entity Framework 模型中的 MVC 4 模板中使用 UserProfile?

c# - Entity Framework 中的追随者模式

c# - Webkit.Net C# : How to import JavaScript in HTML

c# - DataTable 到 JSON 到 Controller 到 jqGrid

javascript - 如何在 Javascript/Ajax 中将多个值作为单个对象传递

c# - 使用 StackExchange.Redis 时是否需要缓存加载的脚本?

c# - 标识列的数据类型必须为 int、bigint、smallint、tinyint、decimal 或 numeric