Nella mia app sto usando EF. Ho il servizio che può fornire alcune informazioni e clienti che vogliono chiedere tali informazioni. Immaginiamo di avere un utente, che ha l'indirizzo, l'elenco delle attrezzature, l'elenco degli abbonamenti, l'elenco dei saldi. Ogni saldo ha l'elenco delle operazioni.
public class User
{
public User()
{
Equipments = new HashSet<Equipment>();
Balances = new HashSet<Balance>();
Subscriptions = new HashSet<Subscription>();
}
public long Id { get; set; }
public string LastName { get; set; }
public DateTime DOB { get; set; }
public long AddressId { get; set; }
public Address Address { get; set; }
public ICollection<Equipment> Equipments { get; set; }
public ICollection<Balance> Balances { get; set; }
public ICollection<Subscription> Subscriptions { get; set; }
}
public class Equipment
{
public long Id { get; set; }
public string Model { get; set; }
public int StateId { get; set; }
public long UserId { get; set; }
public User User { get; set; }
}
public class Balance
{
public Balance()
{
Operations = new HashSet<BalanceOperation>();
}
public long Id { get; set; }
public decimal Amount { get; set; }
public int CurrencyId { get; set; }
public long UserId { get; set; }
public User User { get; set; }
public ICollection<BalanceOperation> Operations { get; set; }
}
public class BalanceOperation
{
public long Id { get; set; }
public DateTime OperationDate { get; set; }
public long BalanceId { get; set; }
public Balance Balance { get; set; }
}
public class Address
{
public int Id { get; set; }
public string City { get; set; }
public int HouseNumber { get; set; }
}
public class Subscription
{
public long Id { get; set; }
public int ServiceId { get; set; }
public bool IsActive { get; set; }
public long UserId { get; set; }
public User User { get; set; }
}
Inoltre ho un UserInfo DTO, che può contenere tutte quelle informazioni. I clienti vogliono usare gli UserDto in diversi punti dell'app. Ma non hanno bisogno di tutte le informazioni tutto il tempo. Ad esempio, a volte ho bisogno solo dell'utente con i suoi saldi senza operazioni. A volte - solo attrezzature e abbonamenti. A volte - equilibri con operazioni. Quindi, quello che voglio è che il client utilizzi un metodo per ottenere informazioni fornendo una sorta di include.
int includes = (int)(IncludeEnum.Adress | IncludeEnum.Subscriptions);
UserInfo userInfo = _service.GetUserInfo(id, includes);
Il problema è come costruire l'architettura del server, quali modelli usare ecc. Dipende da Include Costruirò diverse query su DB e riempirò UserInfo in modo corretto. Il server deve fornire informazioni e non fornire le informazioni non necessarie e nemmeno a quelle informazioni nel DB. Quindi ridurrebbe il numero di richieste. In EF posso usare Include () per ottenere oggetti correlati. A volte posso creare query utilizzando LINQ (da ... join ... select). O forse tutti i miei pensieri sono sbagliati? E devo fare tutte le cose in modo diverso?