Architettura (struttura) orientata rispetto alla struttura del progetto orientata alla funzionalità

12

Il progetto, ho coinvolto, ha una struttura di file / cartelle del progetto orientato all'architettura:

Root
|____ Node1
    |____ Event Handlers
    |         |___ <all event handlers of project>
    |____ Events
    |         |___ <all events of project>
    |____ Request Handlers  
    |         |___ <all request handlers of project>
    |____ Requests
    |         |___ <all requests of project>
    |____ ...

È chiaro dal punto di vista architettonico del sistema (è stato proposto dal team di sviluppo).

È una struttura orientata alle funzionalità proposta dal team di designer:

Root
|____ Feature #1
    |____ Event Handlers
    |         |___ <all event handlers of Feature #1>
    |____ Events
    |         |___ <all events of Feature #1>
    |____ Request Handlers  
    |         |___ <all request handlers of Feature #1>
    |____ Requests
    |         |___ <all requests of Feature #1>
    |____ ...

Questa variante è più vicina ai progettisti e descrive chiaramente una funzionalità da implementare.

I nostri team hanno iniziato una guerra santa: qual è l'approccio migliore. Qualcuno potrebbe aiutarci e spiegare i pro ei contro del primo e del secondo. Forse c'è un terzo che è più utile e vantaggioso per entrambi.

Grazie.

    
posta Zzz 10.11.2010 - 20:04
fonte

5 risposte

11

Vorrei votare per il secondo. Nella prima struttura, i gestori di eventi per FeatureA non sono completamente correlati ai gestori di eventi per FeatureB . Sembra che gli sviluppatori lavoreranno su una funzione alla volta e se stai lavorando su una richiesta FeatureX , è molto più probabile che dovrai modificare un gestore di richieste FeatureX rispetto, ad esempio, a% richiesta diFeatureZ.

A proposito, mi piace come hai posto questa domanda da un punto di vista neutrale.

    
risposta data 10.11.2010 - 20:13
fonte
4

Sono sempre stato più a mio agio con il secondo approccio, ma ho sempre una "funzione" chiamata generale o comune per le classi realmente condivise / base.

L'approccio due mantiene separate le cose veramente separate, ma senza l'area "comune" a volte separa le cose in aree che non si adattano bene.

    
risposta data 10.11.2010 - 20:15
fonte
3

Perché gli inventori di feature si preoccupano dei dettagli di implementazione? Se questa è la separazione tra i lati dell'argomento, allora penso che la risposta sia chiara. Le persone che inventano idee / caratteristiche non determinano la struttura del file necessaria agli implementatori.

Questo è un problema particolarmente importante quando l'implementazione di una funzione si estende su più DLL, exe, database o altri pezzi di software.

    
risposta data 10.11.2010 - 20:15
fonte
1

Devi essere d'accordo con il secondo approccio, date le due opzioni. Il primo sembra proprio un blob amorfo. Almeno il secondo ha una certa forma.

Dipende davvero da quanto è grande il progetto. Se le "funzionalità" sono grandi, ognuna di esse ha bisogno del proprio bucket distinto.

    
risposta data 10.11.2010 - 20:16
fonte
1

Non capisco la terminologia che stai utilizzando, ma proverò a rispondere comunque, poiché entrambe le strutture sembrano essere l'approccio sbagliato.

A meno che tu non abbia solo una manciata di funzionalità, devi raggrupparle in categorie - e questo non sembra essere previsto in nessuna delle due versioni (a meno che non si tratti di ciò che è Node1, ma di "tutte X di progetto "suggerisce il contrario, e mi fa chiedere a WTF che sia - c'è un Nodo2?)

Potrei considerare qualcosa del genere:

Root
|____ Event Handlers
|   |____ Category A
|   |    |___ Feature #1 EHs
|   |    |___ Feature #2 EHs
|   |    |___ Feature #3 EHs
|   |
|   |____ Category B
|   |    |___ Feature #4 EHs
|   |    |___ Feature #5 EHs
|   |
|
|____ Events
|   |____ Category A
|   |    |___ Feature #1 Events
|   |    |___ Feature #2 Events
|   |    |___ Feature #3 Events
|   |
|   |____ Category B
|   |    |___ Feature #4 Events
|   |    |___ Feature #5 Events
|   |
|

O questo:

Root
|____ Category A
|   |____ Event Handlers
|   |    |___ Feature #1 EHs
|   |    |___ Feature #2 EHs
|   |    |___ Feature #3 EHs
|   |
|   |____ Events
|        |___ Feature #1 Events
|        |___ Feature #2 Events
|        |___ Feature #3 Events
|   
|____ Category B
|   |____ Event Handlers
|   |    |___ Feature #4 EHs
|   |    |___ Feature #5 EHs
|   |
|   |____ Events
|        |___ Feature #4 Events
|        |___ Feature #5 Events

Ma entrambi stanno facendo delle supposizioni che potrebbero essere completamente disconnesse - se riesci ad aggiornare la tua domanda con maggiori dettagli, potrei cambiare idea. :)

    
risposta data 10.11.2010 - 21:29
fonte

Leggi altre domande sui tag