2010-05-28 55 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。

相關問題