我有一個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