Я делаю свой проект свободного времени в .Net core 2.2
Я разделил свой проект на 4 части
1) DataLayer
2) RepositoryLayer
3) Услуги
4) Уровень веб-API
У меня есть одна модель, и давайте сделаем, например, ее IPerson .
Тогда у меня есть общий репозиторий здесь
class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity, IPhysicalPersonEntity
{
private readonly DataContext _context;
private DbSet<TEntity> _entities;
string errorMessage = string.Empty;
public Repository(DataContext context)
{
_context = context;
_entities = context.Set<TEntity>();
}
public void Delete(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity is null");
}
_entities.Remove(entity);
_context.SaveChanges();
}
public IEnumerable<TEntity> GetAll()
{
return _entities
.AsEnumerable();
}
public TEntity GetByIdentifyNumber(int identifyNumber)
{
return _entities
.SingleOrDefault(e => e.Id == identifyNumber);
}
public void Insert(TEntity entity)
{
if(entity == null)
{
throw new ArgumentNullException("entity is null");
}
_entities.Add(entity);
_context.SaveChanges();
}
public void Remove(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity is null");
}
_entities.Remove(entity);
}
public void SaveChanges()
{
_context.SaveChanges();
}
public void Update(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity is null");
}
var currentEntity = _entities
.SingleOrDefault(e => e.Id == entity.Id);
currentEntity = entity;
_context.SaveChanges();
}
}
Как вы упомянули, третий уровень предназначен для Служб , поэтому у меня есть здесь службы для
- Добавить человека
- Удалить человека.
- Редактировать персонажа.
- Найдите человека с идентификатором.
- Добавить персональные рекомендации.
- 1027 * Etc. *
Каждый сервис - это отдельный класс с единым интерфейсом.
Я знаю, что в каждом сервисе я должен использовать свой объект и методы хранилища.
Но мои вопросы:
- Как обрабатывать один объект репозитория в каждом сервисе?
- Я не хочу создавать каждый объект репозитория в каждом сервисе.
(Или, может быть, это правильно?)
- Какая лучшая практика в этой ситуации?
- Я неправильно делаю свою архитектуру?