Devo passare un oggetto o valori?

1

Diciamo che ho un modello che ha il metodo 'acquisto'. Il metodo di acquisto dovrebbe occuparsi dell'acquisto di un prodotto.

Firma dell'acquisto

public function purchase($token, Model_Member $member, Model_Product $product, Model_Recipient $recipient);

Per chiamare questo metodo, ho bisogno di creare $ membro, $ prodotto e $ destinatario nel mio controller. È considerato un approccio migliore per passare una serie di valori all'acquisto in modo che l'acquisto possa rendere gli oggetti richiesti come in basso?

public function purchase($token, $member_id, $product_id, array $recipient);

in questo caso, acquisto dovrebbe estrarre un record membro dal database e crearne un modello.

Qual è l'approccio migliore?

    
posta Moon 19.12.2013 - 22:56
fonte

2 risposte

2

Is it considered a better approach to pass an array of values to the purchase so that purchase can make those required objects like below?

In generale, direi, no. Ma, come tutto dipende.

Se il tuo dominio che effettua l'acquisto è molto complesso, IMHO, è meglio mappare tutti i dati in strutture che il dominio comprende (quindi nel tuo caso, le entità) e quindi chiamare purchase .

Questo fa un paio di cose positive.

In primo luogo, significa che la logica del core business (acquisto) non ha bisogno di preoccuparsi di come idratare i dati in oggetti. In altre parole, le entità di dominio non hanno bisogno di riferimenti ai repository.

In secondo luogo, significa che è possibile mappare da molte fonti (database, servizi Web, file system) prima di chiamare il dominio aziendale. Quindi, questo crea una buona separazione delle preoccupazioni attorno alla logica di base della tua applicazione.

Per ulteriori informazioni. Raccomando di leggere la serie Onion Architecture dei post del blog.

Ora, per la parte "Dipende":
Ogni volta che aggiungi un livello logico alla tua applicazione, aggiungi complessità. In questo caso, aggiungi la necessità di eseguire la mappatura in questi oggetti dominio prima di chiamare purchase . Quindi, se stai eseguendo semplici operazioni CRUD o effettui l'inoltro di chiamate ad alcuni servizi Web, probabilmente non dovrai sostenere tali costi.

    
risposta data 19.12.2013 - 23:55
fonte
1

Beh, il modo in cui lo faccio è così: Il controller:

  • Dovrebbe essere responsabile per l'interazione con la vista e la scelta del servizio di applicazione appropriato.
    Quindi leggi l'input dall'oggetto richiesta e crea l'appropriato Servizio dell'applicazione.

Il servizio dell'applicazione:

  • Dovrebbe essere responsabile della modellazione del tuo caso d'uso (cioè della tua logica applicativa), ma non ha alcuna logica aziendale. Organizza l'applicazione, ma non funziona da sola.
    L'input non elaborato trasmesso dal controller viene mappato agli oggetti in questo livello. Qualsiasi servizio di dominio richiesto viene creato in questo livello e il metodo appropriato viene invocato su questo servizio.

Il servizio di dominio, entità e oggetti valore:

  • Dovrebbe essere responsabile della modellazione della logica del dominio e del lavoro effettivo.

Quindi, nel tuo caso, crea gli oggetti nel servizio dell'applicazione e trasferiscili all'appropriato servizio / entità / valore del dominio.

    
risposta data 20.12.2013 - 12:58
fonte

Leggi altre domande sui tag