2010-05-28 65 views
2

我有一个ASP.NET MVC 2的项目,我的工作,我想知道,我应该把我的一些代码。只有静态方法的模型才有意义吗?

我现在有它由一堆,对我的数据上下文中进行操作的静态方法的UsersModel。

这些方法包括诸如:UserExistsInDatabaseUserIsRegisteredForActivityGetUserIdFromFacebookId等等等等

如果这些方法是UsersModel类的内部或他们将模型背景之外更适合于用户的辅助类?

干杯的任何指针。

回答

5

不要使用静态方法。摘要他们在一个存储库:

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

虽然我与达林完全同意,我建议你想这样做的原因是为了让UserRepository可以嘲笑/在你的测试取代。用静态方法嘲笑/替换类是非常困难的。 – 2010-05-28 12:17:25

+0

优秀的答案(今天再次)Darin。干杯。科林,谢谢你的额外信息。这肯定会让我的单元测试更容易 - 干杯! – 2010-05-28 12:24:06

0

听起来像一类 “用户” 与特性/功能:
* ExistsInDatabase,
* IsRegisteredForActivity,
* GetIdFromFacebookId

1

我认为,我们应该避免静态方法,因为它会在嘲笑有问题。这些方法更适合于UserRespository/UserService类。

0

的任那些选项是确定。或者,您可以将它们定义为扩展方法,并将它们直接附加到用户类。

HTH。

相关问题