Вы можете использовать репозитории, используя каждую технологию доступа к данным. Репозиторий представляет собой абстракцию над существующими помощниками/службами доступа к данным, что позволяет отделить бизнес-логику от уровня доступа к данным. Репозитории, используемые вместе с Query для включения фильтрации. Он часто используется вместе с единицей работы, чтобы сохранить изменения обратно в базу данных.
Хранилище имеет, по меньшей мере:
- Get-объект-с помощью ключа операции (ов)
- Get-все-объекты операции
- Get-первый объект-по-запросу операции (с)
- Get-объекты-по-запросу операции (ов)
очень простой пример :):
А. Продукт класс, определенный в Common:
public class Product
{
public int Id { get; private set; }
public string Code { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
B. Классы для Query, IRepository и IUnitOfWork определены в DAL.interfaces.dll или Общие .dll (но НЕ в DAL!).
public class Query
{
public string Text { get; set; }
}
public interface IRepository<TEntity>
where TEntity : class
{
bool TryGet(int key, out TEntity value);
TEntity this[int key] { get; }
IEnumerable<TEntity> GetAll();
bool TryGetFirst(Query condition, out TEntity value);
TEntity GetFirst(Query condition);
IEnumerable<TEntity> GetAll(Query condition);
int Count { get; }
}
public interface IUnitOfWork
{
void SetAdded(TEntity value); // Marks entity as added for further INSERT
void SetRemoved(TEntity value); // Marks entity as removed for further DELETE
void SetChanged(TEntity value); // Marks entity as modified for further UPDATE
void Save(); // Save all the changes
}
IUnitOfWork знает измененных образований.Save() вызывает соответствующий метод DatabaseHelper/OdbcHelper CRUD для каждого измененного объекта, чтобы сохранить изменения в базе данных.
Реализация IRepository < продукта > ... IRepository <EntityXY> и IUnitOFWork должны быть помещены в DAL. Затем BLL использует IRepository и IUnitOFWork для реализации бизнес-логики (домена). Сам BLL может быть организован как сервисный уровень в верхней части доменной модели, но это выходит за рамки обсуждения :).
Надеюсь, мой ответ поможет.
Пожалуйста, не стесняйтесь задавать мне вопрос ...
Ссылки: Patterns of enterpise application architecture by Martin Fowler
Мы используем Entities/объект в M (модели), когда мы хотим, чтобы выставить их на вид. В противном случае мы теперь добавим их в отдельную библиотеку классов домена. Но как использовать дизайн репозитория? И где поместить вызовы базы данных (общие и специфичные для базы данных)? Может быть, это просто именование, но наши мысли приветствуются! – jpderooy
Репозиторий - это не что иное, как отличный отклик на ваши классы DAL, которые используют любую используемую технологию баз данных. Я не хочу вдаваться в подробности того, как репозиторий отличается от ваших классов DAL, это простой запрос google. Однако по сути они серверные аналогичные цели. В противном случае вы все равно создадите экземпляр своего класса BLL в своем контроллере, который, в свою очередь, создаст экземпляр репозитория, в конечном итоге вернув сущность, чтобы использовать ее как M в MVC. – e36M3
Привет, это имеет смысл. Я думаю, что разница или сходство в репозитории <> DAL не понятна (даже при поиске в Google). Можете ли вы дать мне дополнительную информацию об установке? Объекты, бизнес-логика и репозиторий, которые взаимодействуют с базой данных? Где - в структуре логических папок и имени - мы помещаем конкретные операции с базой данных, например, db.run()? Благодаря! – jpderooy