我有一个ASP.NET MVC 2的项目,我的工作,我想知道,我应该把我的一些代码。只有静态方法的模型才有意义吗?
我现在有它由一堆,对我的数据上下文中进行操作的静态方法的UsersModel。
这些方法包括诸如:UserExistsInDatabase
,UserIsRegisteredForActivity
,GetUserIdFromFacebookId
等等等等
如果这些方法是UsersModel类的内部或他们将模型背景之外更适合于用户的辅助类?
干杯的任何指针。
我有一个ASP.NET MVC 2的项目,我的工作,我想知道,我应该把我的一些代码。只有静态方法的模型才有意义吗?
我现在有它由一堆,对我的数据上下文中进行操作的静态方法的UsersModel。
这些方法包括诸如:UserExistsInDatabase
,UserIsRegisteredForActivity
,GetUserIdFromFacebookId
等等等等
如果这些方法是UsersModel类的内部或他们将模型背景之外更适合于用户的辅助类?
干杯的任何指针。
不要使用静态方法。摘要他们在一个存储库:
public interface IUsersRepository
{
bool UserExistsInDatabase(User user);
bool UserIsRegisteredForActivity(User user);
...
}
然后实现对一些数据存储:
public class UsersRepository : IUsersRepository
{
...
}
最后给你的控制器这个仓库的一个实例,以便它可以与用户工作:
public class HomeController : Controller
{
private readonly IUsersRepository _repository;
public HomeController(IUsersRepository repository)
{
// the repository is injected into the controller by the DI framework
_repository = repository;
}
// ... some action methods that will use the repository
}
听起来像一类 “用户” 与特性/功能:
* ExistsInDatabase,
* IsRegisteredForActivity,
* GetIdFromFacebookId
我认为,我们应该避免静态方法,因为它会在嘲笑有问题。这些方法更适合于UserRespository/UserService类。
的任那些选项是确定。或者,您可以将它们定义为扩展方法,并将它们直接附加到用户类。
HTH。
虽然我与达林完全同意,我建议你想这样做的原因是为了让UserRepository可以嘲笑/在你的测试取代。用静态方法嘲笑/替换类是非常困难的。 – 2010-05-28 12:17:25
优秀的答案(今天再次)Darin。干杯。科林,谢谢你的额外信息。这肯定会让我的单元测试更容易 - 干杯! – 2010-05-28 12:24:06