Ciao!
non sono sicuro di aver capito al 100% la domanda ma da quanto ho capito io in genere gestisco il problema in questo modo:
Per ogni entità rappresentata in un database (una tabella) , ho una classe repository che contiene tutti i metodi che l'applicazione richiede..
In genere serve un interfaccia e la sua implementazione, qualcosa del genere:
public interface ICarsRepository
{
IEnumerable<Car> GetAll();
IEnumerable<Car> DeleteCarByColor(string color);
}
public class CarsRepository : ICarsRepository
{
private readonly IDatabaseService db;
public CarsRepository(IDatabaseService _db)
{
db = _db;
}
public async IEnumerable<Car> GetAll()
{
return await db.Car.ToList();
}
public async IEnumerable<Car> DeleteCarByColor(string color)
{
var cars = await db.Car.Where(x => x.colore = color).ToList();
foreach (var car in cars)
{
db.Remove(car);
}
db.SaveChangesAsync();
}
}
In questo modo tutte le altre classi/servizi (amministratore o altro) richiameranno questa repository per la gestgione delle chiamate e ognuna di queste classi potrà avere dei metodi personalizzati.
public class AmministratoreService
{
private readonly ICarsRepository _carsRepository;
public AmministratoreService(ICarsRepository carsRepository)
{
this._carsRepository = carsRepository;
}
public async Task DeleteRedCars()
{
await _carsRepository.DeleteCarByColor("red");
}
}
In sostanza in applicazione non troppo complesse una singola classe repository esporrebbe una serie di metodi per il richiamo e modifica di dati e le altre classi come amministratore hanno dei metodi specifici in base alla necessità che comunque utilizzano la classe repository per la loro risoluzione (vedi DeleteRedCars in amministratore che richiama il metodo DeleteCarByColor con un parametro nella classe repository)
In applicazione più complesse potrebbero esserci più repository riferite alla singola entità ad esempio:
- un autoReaderRepository per tutte le query che dovranno solo ad andare a leggere dei dati
- un autoChangeRepository per tutte le query che effettuano modifiche.
E nelle vari classi/servizi fare riferimento alla repository che serve.
Questi sono ovviamente solo degli esempio, non sono per forza quelli più "giusti" o migliori.
Spero di essere chiaro e soprattutto di essere stato utile
A disposizione
grazie
Maurizio