Ristrutturazione delle migliori pratiche n-tier in architettura a fette verticali

4

Quale percorso di lavoro esiste per identificare le fette verticali ragionevoli di una base di codice e di un'infrastruttura classiche per piattaforme di livello superiore (dimensione aziendale)? Per quanto riguarda il refactoring o una nuova soluzione, penso che ci sarà lo stesso approccio (più o meno?) Quindi sono interessato principalmente ai passaggi e alla definizione di moduli, funzioni, quindi "test" in un'unità funzionale o se è appropriato come verticale.

Per estendere il mio pensiero ..
Capisco che un verticale dovrebbe essere un attore, una specie di valore aziendale. Ma un sistema di comunicazione è un attore o un'unità funzionale in una fetta verticale? Probabilmente sì E no (dipende dall'impresa), ma come decidere? La spedizione è una parte dell'ordine o entrambe le direzioni sono diverse per ordine e spedizione?

Che cosa dovrebbe consistere in una fetta verticale, per essere una verticale vera? In termini di livelli di funzioni, ad esempio "un proprio archivio dati, un proprio strumento di configurazione client, un proprio calcolo di business intelligence" e così via. Btw: È un requisito che i verticali debbano essere schierati e operabili indipendentemente l'uno dall'altro.

Forse c'è un tipo di schema "sì / no" da usare? "Questa X è usata per Y?" Sì, allora è una verticale. "X è usato con Z?" - Sì, quindi è anti-pattern per verticale. "X dipende dalla funzione YY?" Se sì, allora ..

E così via. Anche i collegamenti alle storie di successo quando si definiscono i verticali sono interessanti.

    
posta Independent 09.05.2013 - 13:02
fonte

2 risposte

3

Affrontare un refactoring significativo richiede una solida comprensione di perché stai eseguendo quel refactoring.

Escludo le giustificazioni a livello di hobby come "rendere il codice più puro" o "migliorare l'espressione stilistica" o simili. Quelle non sono giustificazioni cattive , ma un progetto commerciale non vedrà quasi mai o utilizzerà quel livello di giustificazione per un'impresa importante.

Al contrario, la giustificazione del refactoring a livello commerciale implica sempre dolore.

  • "La manutenzione è diventata impossibile."
  • "Il codice base non può essere esteso."
  • "Le modifiche al codice generano errori oscuri in aree non previste del codice."

Il dolore giustifica le spese e i rischi coinvolti. E il dolore ti porta alla tua risposta. Si refactoring al fine di ridurre al minimo il dolore futuro. Refactor per incapsulare la modifica .

Hai menzionato un paio di aspetti come i sistemi di comunicazione, gli ordini e le spedizioni. E hai correttamente affermato che non esiste un approccio unico per identificare ciò che appartiene a. Ogni sistema è diverso in base al dominio e alle esigenze aziendali.

Per il tuo sistema, identifica cosa sta cambiando. Spingilo nella sua verticale che è conforme a un contratto oa un'API con il resto del sistema. Ogni volta che la sezione cambia, puoi verificare che rispetti ancora il suo contratto e controllare la quantità di danni dal cambio di codice.

    
risposta data 11.06.2013 - 22:56
fonte
1

Il modo corretto potrebbe non essere strettamente orizzontale o verticale, ma wavelet:

link

  • AsseX:unitàfunzionalidiun'azienda(ordine,spedizione,ecc.)
  • AsseY:ilivellidell'architetturasoftware(database,transazioni,codedimessaggi,servizi,serviziWeb,front-end)

Lachiaveècostruireilivelliinferioridelsoftwareinunmodoaltamenteriutilizzabileefacilepergliutentidilivellosuperiore,inmodocheglisviluppatorideilivellisuperiorinondebbanospenderetroppotempoarifareciòcheilivelliinferioridovrebberofare.

Ilvantaggiodeilivelliinferioririutilizzabilipuòessereestesooltrelaprogrammazionedelsoftware:configurazioni,immaginidimacchinevirtuali,licenzesoftwareepersinospecifichehardware(oanchemacchineserverstandardizzate)possonoessereprogettateconriusabilità(dapiùunitàaziendaliinmente.

Illivellopiùaltopotrebbeaverbisognodiparlareapiùunitàfunzionaliperfarelecose.

Considerailproblemadell'assistenzaclientineltuoesempio.

  • Sec'èunproblemanelsistemaOrdine,ilclientedeveesserecontattato.
  • Sec'èunproblemaconlaspedizione,ancheilclientedeveesserecontattato.

Ilpostdelblog link suggerito da @ user61852 parla della scrittura nuovo software. Quando si utilizza l'approccio a sezioni verticali, si cerca di soddisfare un piccolo facet di funzionalità richiesto da una singola unità funzionale, implementando la più piccola quantità di software.

  • Esempio: se la spedizione necessita di parlare con il cliente, verrà assegnato un numero di interno solo al reparto di rappresentanza del cliente e a un ID cliente. Qualcuno nel reparto spedizioni deve farlo manualmente.
  • In futuro, potrebbe essere integrato con Skype, ma questo è il lungo futuro.

Il post sul blog implica l'uso di molti mock-up, interfacce utente a tiro e prop-up (modo imperfetto per soddisfare parte dei requisiti funzionali) mentre un'implementazione più duratura è prevista più avanti nel progetto.

Il post del blog non parla del refactoring di un sistema software aziendale esistente.

Come @ GlenH7 implica, se funziona, non apportare modifiche rischiose ad esso.

    
risposta data 11.08.2013 - 01:43
fonte

Leggi altre domande sui tag