Asp.net mvc 3 在ASP.NET MVC3中实现这些功能的更好模式是什么?
我们有几个功能遵循非常相似的模式:Asp.net mvc 3 在ASP.NET MVC3中实现这些功能的更好模式是什么?,asp.net-mvc-3,design-patterns,Asp.net Mvc 3,Design Patterns,我们有几个功能遵循非常相似的模式: 用户提交电子邮件地址 用户收到带有密码的电子邮件 用户赎回密码以执行安全操作 例如,我们的注册/注册功能遵循这种模式。用户提交电子邮件地址,接收电子邮件,然后使用密码创建密码和用户帐户。另一个例子是密码重置。用户提交电子邮件地址,接收电子邮件,然后使用密码更改密码并访问用户帐户 模式#1 我们可以有一个单独管理每个功能的控制器。例如,一个处理所有相关操作(发送电子邮件、兑换代码和创建密码)的注册控制器。然后我们可以有一个PasswordResetControl
模式2的优点和缺点正好相反。我们可以简化控制器的依赖关系,但这些功能将分布在多个控制器上,模糊了整个应用程序试图实现的功能的清晰性 我将使用一个帐户控制器来管理所有相关的用户管理功能。该控制器将是用户处理这些类型功能的访问点 然后,我会将您提到的独立逻辑分离到不同的模型类中,这些模型类将根据需要由该控制器调用。示例:
/models/EmailManager.cs
/models/PasswordManager.cs
/models/SecretCodeGenerator.cs
/models/AccountManager.cs
这将允许您使用统一的url语法。这将使您不必拥有许多只使用一种方法的控制器。这将避免控制器中存在大量的模型类型逻辑
www.mydomain.com/account/signup/
www.mydomain.com/account/confirm/
www.mydomain.com/account/resetpassword/
(使用自定义路由,如果愿意,您甚至可以删除/account/part)
然而,我可能会尝试创建一个自定义控制器来处理密码的赎回。(兑换控制器)通过这种方式,您可以仅对授权/现有用户控制对accountController的大部分访问,而兑换控制器(取决于您的设计)可能对新客户的匿名用户开放
最后,在模型类中使用大多数逻辑使它们更易于测试。我将使用一个帐户控制器来管理所有相关的用户管理功能。该控制器将是用户处理这些类型功能的访问点 然后,我会将您提到的独立逻辑分离到不同的模型类中,这些模型类将根据需要由该控制器调用。示例:
/models/EmailManager.cs
/models/PasswordManager.cs
/models/SecretCodeGenerator.cs
/models/AccountManager.cs
这将允许您使用统一的url语法。这将使您不必拥有许多只使用一种方法的控制器。这将避免控制器中存在大量的模型类型逻辑
www.mydomain.com/account/signup/
www.mydomain.com/account/confirm/
www.mydomain.com/account/resetpassword/
(使用自定义路由,如果愿意,您甚至可以删除/account/part)
然而,我可能会尝试创建一个自定义控制器来处理密码的赎回。(兑换控制器)通过这种方式,您可以仅对授权/现有用户控制对accountController的大部分访问,而兑换控制器(取决于您的设计)可能对新客户的匿名用户开放
最后,在模型类中使用大多数逻辑使它们更易于测试。是否有一个选项可以只使用一个AccountController(类似于Visual Studio在创建新应用程序时提供的)?似乎管理关于用户的所有操作并不困难。对于发送电子邮件,我建议使用一些EmailService类和一些电子邮件模板。这太简单了吗?@Shymep,我们已经有了电子邮件模板和电子邮件服务类。事实上,EmailTemplateRepository和EmailService都是这些功能的发送电子邮件组件的依赖项。将所有这些东西放在一个AccountController中会使该控制器极度膨胀。我希望以某种方式将不同的账户相关责任分开。我同意Shymep。如果可能,将用户帐户内容保存在一个控制器中。如果你坚持MVC模式(控制器SCONNY,模型FAT),那么你的控制器就不应该“极度臃肿”,所以即使在每个方法都是精益的情况下,你也不认为在一个控制器中有20个动作方法是臃肿的吗?如果这意味着您必须在控制器构造函数中注入5个以上的依赖项,该怎么办?是否可以选择仅使用一个AccountController(类似于Visual Studio在创建新应用程序时提供的)?似乎管理关于用户的所有操作并不困难。对于发送电子邮件,我建议使用一些EmailService类和一些电子邮件模板。这太简单了吗?@Shymep,我们已经有了电子邮件模板和电子邮件服务类。事实上,EmailTemplateRepository和EmailSe