Имеет ли смысл иметь модель только со статическими методами? - PullRequest
2 голосов
/ 28 мая 2010

У меня есть проект ASP.NET MVC 2, над которым я работаю, и мне интересно, где мне разместить часть своего кода.

В настоящее время у меня есть UsersModel, которая состоит из набора статических методов, которые работают с моим контекстом данных.

Эти методы включают в себя такие вещи, как: UserExistsInDatabase, UserIsRegisteredForActivity, GetUserIdFromFacebookId и т. Д. И т. Д.

Должны ли эти методы быть внутри класса UsersModel или они больше подходят для вспомогательного класса пользователя вне контекста моделей?

Приветствия к любым указателям.

Ответы [ 4 ]

5 голосов
/ 28 мая 2010

Не используйте статические методы. Абстрагируйте их в хранилище:

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 голос
/ 28 мая 2010

Я думаю, что мы должны избегать статических методов, так как это будет иметь проблему при насмешках. Эти методы лучше подходят для класса UserRespository / UserService.

0 голосов
/ 28 мая 2010

Любой из этих вариантов в порядке. В качестве альтернативы вы можете определить их как методы расширения и напрямую присоединить их к пользовательскому классу.

НТН.

0 голосов
/ 28 мая 2010

звучит как класс «Пользователь» со свойствами / функциями:
* ExistsInDatabase,
* IsRegisteredForActivity,
* GetIdFromFacebookId

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...