Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Заблокирован
1

Паттерн Repository

26.09.2014, 14:03. Показов 3495. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
во всех примерах самой простой реализации паттерна нечто такое:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class SomeEntity
{
    int ID { get; set; }
}
public interface IRepository<T> where T : class
{
    void Add(T entity);
    void Delete(T entity);
    T GetById(long Id);
    T Get(Func<T, Boolean> where);
    IEnumerable<T> GetAll();
    IEnumerable<T> GetMany(Func<T, bool> where);
}
 
public class SomeEntityRepository : IRepository<SomeEntity>
{
    private ISomeContext DataContext;
    private readonly IDbSet<T> dbset;
    public SomeEntityRepository()
    {
        DataContext = DependencyResolved.Current.GetService<ISomeContext>();
        dbset = DataContext.Set<T>();        
    }
    //реализация интерфейса
}
сущностей может быть много. не пихать же мне в каждый контроллер кучу репозиториев для каждой сущности, какое базовое решение для этого используют на практике

хочу нечто такое, или такое решение может быть нормальное?

C#
1
2
3
4
5
6
7
8
9
10
public class EntitiesRepository 
{
    public EntitiesRepository()
    {
        SomeEntityRepository =  DependencyResolved.Current.GetService<IRepository<SomeEntity>>();
        SomeEntityRepository =  DependencyResolved.Current.GetService<IRepository<SomeEntityXXX>>();
    }
    IRepository<SomeEntity>  SomeEntityRepository { get; set; }
    IRepository<SomeEntityXXX>  SomeEntityRepositoryXXX { get; set; }
}
C#
1
2
3
4
5
6
7
8
9
public class CategoryController : Controller
{
    private readonly EntitiesRepository repository = new EntitiesRepository();
 
    public ActionResult Index()
    {
        return View();
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2014, 14:03
Ответы с готовыми решениями:

Структура классов шаблона Repository
Делал блог по этом примеру Хотел бы разобраться структуре классов шаблона, не совсем понял...

Рассуждения о Generic Repository паттерне
Добрый день. Хотелось бы прояснить для себя следующий момент. Вот есть у нас обобщенный...

ASP.NET Identity 2.0 + Repository - работа в отдельном проекте
Начал изучать Авторизация и аутентификация в MVC 5. Столкнулся с проблеммой, покажу код ...

Generic Repository без Entity
Не могу понять как реализовать Generic Repository без Entity Framework

3
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
26.09.2014, 15:33 2
Вопрос скорее философский.

Можно например выстроить архитектуру приложения так, чтобы у контроллера не было много зависимостей от репозиториев. Использовав для этого слой бизнес-логики.

Можно воспользоваться фабрикой, вот пример на Ninject
0
Заблокирован
26.09.2014, 16:04  [ТС] 3
Defazze, не понял пример с фабрикой
0
325 / 136 / 28
Регистрация: 18.09.2014
Сообщений: 167
26.09.2014, 16:09 4
Лучший ответ Сообщение было отмечено ТОрчОК как решение

Решение

Фабрика:

C#
1
2
3
4
5
6
public interface IRepositoryFactory
    {
        IUserRepository CreateUserRepository();
        ICustomerRepository CreateCustomerRepository();
        IOrderRepository CreateOrderRepository();
    }
Разрешение зависимостей:

C#
1
2
3
4
5
6
7
8
9
10
11
 public class CommonModule : NinjectModule
    {
        public override void Load()
        {
            Bind<IUserRepository>().To<UserRepository>();
            Bind<ICustomerRepository>().To<CustomerRepository>();
            Bind<IOrderRepository>().To<OrderRepository>();
 
            Bind<IRepositoryFactory>().ToFactory();
        }
    }
Использование:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class CustomerController
    {
        private readonly IRepositoryFactory _repositoryFactory;
 
        public CustomerController(IRepositoryFactory repositoryFactory)
        {
            _repositoryFactory = repositoryFactory;
        }
 
        public void Test()
        {
            var customerRepository = _repositoryFactory.CreateCustomerRepository();
        }
    }
т.е. суть в том, что вместо пучка репозиториев передаем только ссылку на фабрику. А потом внутри класса достаем нужные репозитории. При этом саму фабрику реализовывать не надо, достаточно только объявить интерфейс и указать, что его надо разрешить в фабрику. Остальное сделает Ninject.
2
26.09.2014, 16:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2014, 16:09
Помогаю со студенческими работами здесь

Что такое Паттерн?
Объясните мне пожалуйста что такое паттерн и с чем его едят? если можно какой нибудь пример...

Проблему поймал, нужен грамотный паттерн.
Пишу форум. Ну, естественно, хотелось бы разрешить пользунам вставлять гиперссылки что-нибудь типа...

паттерн регексповый надо сделать на урл (в качестве адресов только IP)
проверьте, други! паттерн регексповый надо сделать на урл (в качестве адресов только IP)...

Почему паттерн абстрактная фабрика - паттерн уровня объектов, если в нём могут быть статические отношения?
Взято из Шевчук А., Охрименко Д., Касьянов А. Design Patterns via C#. Приемы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru