È meglio avere azioni separate di Crea e Modifica o combinare Crea e Modifica in uno?

15

Utilizziamo ASP.NET MVC 2 con un Controller / View Presentation Layer e Model costituito da un livello di business logic, un livello di accesso ai dati [stored procedure e classi / metodi per comunicare con le stored procedure].

Nel livello aziendale e sopra per la maggior parte degli scopi, Edit sembra essere in grado di rappresentare sia la creazione di un oggetto che la modifica di un oggetto. Questo coincide bene con il nostro pattern di progettazione del repository che definisce un metodo "Salva". Possiamo semplicemente controllare la stored procedure se l'ID è 0 e quindi creare un nuovo oggetto se è 0 altrimenti potremo semplicemente aggiornare l'oggetto esistente, poiché l'id della categoria dovrebbe corrispondere a uno.

Il punto di discussione principale è se ha più senso dividere la modifica che include la creazione nelle sue parti separate di Crea e modifica oltre il livello DAL.

Un esempio ovvio può essere mostrato come percorsi:

Crea - link

Modifica - link

vs.

Crea - link

Modifica - link

Esistono standard stabiliti o migliori pratiche in merito?

So che questo è un piccolo dettaglio, ma penso che sia logisticamente importante.

    
posta Joshua Enfield 29.08.2011 - 15:46
fonte

2 risposte

5

Direi sicuramente che vale la pena separare Crea / Modifica, se non per obbedire a il principio di responsabilità singola .

Si potrebbe affermare che c'è un SEO migliore per avere l'azione corretta anche nell'URL.

Non separare i due renderebbe anche il codice più difficile da testare l'unità.

Un nuovo programmatore che legge il codice probabilmente non troverà il codice molto intuitivo nel dover creare oggetti in un metodo di "modifica", semplicemente non ha senso semanticamente. Posso comunque simpatizzare con il metodo Save () nel DAL.

Pensandoci, non riesco davvero a vedere i vantaggi di mettere tutto in un metodo Edit.

    
risposta data 29.08.2011 - 20:18
fonte
3

Di solito preferisco creare un metodo Save nel DAL, ma in realtà implementare il Create / Edit / Delete separatamente.

Ad esempio, il mio metodo Save controlla lo stato dell'oggetto e chiama il metodo Crea / Modifica / Elimina a seconda di cosa è necessario

switch(obj.State)
{
    case ObjectState.New:
        CreateObject(obj);
        break;
    case ObjectState.Modified:
        UpdateObject(obj);
        break;
    case ObjectState.Deleted:
        DeleteObject(obj);
        break;
}

Questo mi permette di chiamare solo un metodo generico per salvare qualsiasi oggetto, ma mantiene comunque l'implementazione di ciascuno (Crea, Modifica, Elimina) separati.

    
risposta data 29.08.2011 - 16:41
fonte

Leggi altre domande sui tag