Gestisce l'oggetto nel gestore o nell'oggetto interno

0

Ho iniziato a chiedermi quale sia la migliore pratica nella gestione degli oggetti nello sviluppo web.

Semplifica il processo quando c'è una richiesta di pagina che assomiglia spesso a:

  1. Richiesta di pagina.
  2. Recupera i dati oggetto dal database.
  3. Crea oggetto.
  4. Restituisci oggetto alla pagina.

E su POST o salva:

  1. Ottieni dati dalla pagina.
  2. (Crea oggetto) potrebbe essere fatto in 1.
  3. Salva i dati dell'oggetto nel database.

Ho scritto un codice di esempio qui sotto:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }

    public bool SaveNew()
    {
        SaveToDatabase(this.Id, this.Name, this.Category);
    }
    public void SetElementsById()
    {
         var datarows = GetProductDataByIdFromDB(this.Id);
         Name = datarows[1].ToString();
         Category = datarows[2].ToString();
    }
}

public class ProductHandler
{
    public bool SaveNew(Product product)
    {
        SaveToDatabase(product.Id, product.Name, product.Category);
    }
    public void GetProductById(int id)
    {
        Product product = new Product();
        product.Id = id;

        var datarows = GetProductDataByIdFromDB(id);
        product.Name = datarows[1].ToString();
        product.Category = datarows[2].ToString();
    }
} 

Qual è la migliore pratica, per gestire i dati dell'oggetto all'interno dell'oggetto o in un tipo di classe del gestore?

    
posta AsusT9 11.10.2016 - 09:12
fonte

1 risposta

1

Penso che ti sia imbattuto in un problema ben noto del repository (ciò che hai chiamato "gestore") rispetto all'oggetto attivo.

Alcuni dicono che il pattern di repository è migliore perché promuove il principio di responsabilità singola mentre l'oggetto attivo raggruppa il modello di dati con la logica di persistenza dei dati. Solo per renderlo più complicato, alcune soluzioni utilizzano effettivamente il pattern di repository all'interno dell'oggetto attivo per consentire la testabilità.

D'altra parte gli oggetti attivi sembrano più semplici da gestire e alcuni potrebbero sostenere che gli archivi interrompono la separazione tra livello dell'oggetto business e livello di accesso ai dati.

Personalmente, preferisco il pattern del repository in C #, i motivi principali sono: 1. Avere oggetti "stupidi" consente in molti casi di risparmiare sul numero di classi, perché posso usare le stesse classi per DTO, entità di database e talvolta modelli di visualizzazione lato client (anche se scarsamente). Non mi piace avere diverse versioni della stessa classe per riprovare gli stessi dati ma in contesti diversi e dover fare copie. 2. I metodi di estensione C # consentono di aggiungere qualsiasi logica a qualsiasi oggetto senza inquinarlo con il codice. 3. L'uso di oggetti attivi, nella maggior parte dei casi in cui mi sono imbattuto, in realtà non nasconde realmente il livello dati - considera le transazioni, alcune volte vuoi semplicemente commettere un cambio di dati all'istante, alcune volte vuoi fare diversi aggiornamenti su una singola transazione. Con repository è esplicito, con oggetti attivi, hmmm nel mio caso ho appena aggiunto commit sul contesto, che praticamente uccide l'intera idea di nascondere il livello di persistenza all'interno degli oggetti.

Quindi questo è solo il mio 5c, ci sono tonnellate di materiale in rete su questo, google repository vs record attivo.

    
risposta data 11.10.2016 - 20:45
fonte

Leggi altre domande sui tag