Accoppiamento del livello di servizio

0

Sto lavorando alla scrittura di un livello di servizio per un sistema di ordini in php. È lo scenario tipico, hai un ordine che può avere più partite singole. Quindi diciamo che è stata ricevuta una richiesta per memorizzare un elemento pubblicitario con immagini e commenti. Potrei ricevere una richiesta JSON come

{ 
    'type': 'Bike',
    'color': 'Red',
    'commentIds': [3193,3194]
    'attachmentIds': [123,413]
}

La mia idea era di avere una classe Service_LineItem_Bike che sappia prendere i dati JSON e memorizzare un'entità per una bicicletta.

La mia domanda è, la classe Service_LineItem ora ha bisogno di recuperare commenti e file allegati e memorizzare le relazioni. Service_LineItem sembra che dovrebbe interagire con Service_Comment e Service_FileUpload . Le istanze di questi due altri servizi dovrebbero essere istanziate e passate al costruttore Service_LineItem o impostate da Getter e Setter? L'iniezione delle dipendenze sembra la soluzione giusta, perché un accesso al servizio a un 'assistente per il recupero dei servizi' sembra sbagliato, e questo dovrebbe rimanere a livello di applicazione.

Sto usando Doctrine 2 come un ORM, e posso tecnicamente scrivere una query dql all'interno di Service_LineItem per recuperare i commenti e i file caricati necessari per l'associazione, ma sembra che avrebbe un accoppiamento più stretto, piuttosto che partire questo fino all'oggetto di servizio giusto.

    
posta Justin 05.11.2013 - 07:16
fonte

1 risposta

1

Quando si tratta di accoppiamento stretto, è utile ricordare i principi SOLID . In questo caso, hai un unico comando che ha troppe responsabilità: creare una bicicletta, aggiungervi commenti e allegare delle immagini ad essa. Scopriamolo:

  1. Crea elemento pubblicitario della bicicletta (rosso)
  2. Commenta l'elemento pubblicitario.
  3. Allega immagine all'elemento pubblicitario.

Crea un metodo separato per ciascuno di questi comportamenti e dimentica tutte quelle astrazioni (dopotutto è php;). Chiama il metodo appropriato dall'interfaccia utente tramite Ajax quando l'utente fa qualcosa.

Sto indovinando che i commenti e gli allegati sono completamente opzionali, quindi fare questo in questo modo non metterebbe quindi i tuoi dati in uno stato non valido.

    
risposta data 06.11.2013 - 02:41
fonte

Leggi altre domande sui tag