Logica di disaccoppiamento e accesso ai dati dal livello di servizio

0

Gradirei un feedback sulle seguenti scelte progettuali, anche se il pattern IDisposable che sto usando è buono in questo caso. Ho cercato di seguire ciò che Microsoft suggerisce durante l'implementazione di IDisposable, quindi presumo che sia sicuro.

Dispongo di un servizio OData WebAPI e desidero separarlo dalla logica aziendale e dal codice di accesso ai dati, quindi ho creato un progetto Livello logica aziendale in cui eseguo tutte le mie logiche di business e l'accesso al database. Non voglio ulteriormente disaccoppiare la logica aziendale dall'accesso ai dati perché in questo caso non è molto utile per me.

Livello servizio:

public class UsersController : ODataController
{
    private readonly UserLogic _userLogic = new UserLogic();

    [EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
    public IQueryable<UserModel> Get()
    {
        return _userLogic.Get();
    }

    protected override void Dispose(bool disposing)
    {
        _userLogic.Dispose();
        base.Dispose(disposing);
    }
}

Livello della logica aziendale:

public class UserLogic : IDisposable
{
    private bool _disposed;
    private readonly ProductServiceDataDbContext _dbContext = new ProductServiceDataDbContext();

    public IQueryable<UserModel> Get()
    {
        return _dbContext.Users.ProjectTo<UserModel>();
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (_disposed)
            return;

        _dbContext.Dispose();

        _disposed = true;
    }
}

Se ti stai chiedendo come istanziare AutoMapper, chiamo semplicemente un metodo Intialize statico nel livello BL dalla classe WebApiConfig.

Il mio piano è di gestire solo il controllo dei permessi nel livello Servizio, e tutto ciò che riguarda la logica aziendale, l'accesso ai dati e la mappatura dalle Entità alle DTO nel livello BL.

Sto utilizzando la configurazione basata su codice per Entity Framework nel mio progetto BL, al fine di rimuovere completamente qualsiasi dipendenza da EF dal livello di servizio.

    
posta Shahin Dohan 29.07.2018 - 18:27
fonte

0 risposte

Leggi altre domande sui tag