Qual è la tecnica migliore per costruire scalabile (estendibile), mantenibile, e il software loosely coupled?

StackOverflow https://stackoverflow.com/questions/3888095

Domanda

Ho giocato in giro con il concetto di 'modulo' che alcuni framework MVC implementano e sembra una buona soluzione, e anche con TDD, ma credo che ci deve essere qualcosa di più, come un modello di progettazione ho perso (I conoscono solo alcuni), che mi permette di costruire applicazioni che possono crescere (in codice) senza limiti.

Qualche idea?

modifica:. Un altro aspetto positivo è che i moduli possono essere costruiti in modo che essi sono indipendente dalle applicazioni, in modo che possano essere riutilizzati

È stato utile?

Soluzione

In "I fatti ed errori di Software Engineering", dice Robert L. Glass:

  

Fact 15. Riutilizzo-in-the-piccolo è un problema ben risolto-.

     

Fact 16. resti riutilizzo-in-the-large un problema soprattutto irrisolto.

     

Fact 17. Riutilizzo-in-the-grandi opere migliori in famiglie di sistemi correlati.

In altre parole, è possibile riutilizzare i moduli, ma solo tra le applicazioni che funzionano in modo molto simile. Cercando di fare moduli così versatile da poterli resuse in qualsiasi applicazione è troppo duro. Si finisce per fare i moduli che sono così configurabili che sono troppo complesso da utilizzare, e contengono un sacco di codice a scenari maniglia che sono di alcuna utilità per una data applicazione.

Si sarebbe meglio la codifica di un modulo personalizzato per ogni applicazione, che fa proprio quello che ogni esigenze applicative, e non di più. Ciò è particolarmente importante per un linguaggio come PHP, in cui il codice viene caricato su ogni richiesta, in modo che il volume di codice ha un impatto significativo sulle prestazioni.

Il riutilizzo di maggiori funzionalità a grana fine è diverso. Gli usi di esempio, la registrazione, è ragionevolmente simile tra le applicazioni, non importa quanto diversi le applicazioni sono l'uno dall'altro. Questo è il motivo per cui la maggior parte dei quadri fanno molto bene con general-purpose classi di servizio in stile.


Re commento da @A_Var:

È possibile effettuare una riutilizzabile classe se si conosce la gamma di possibili funzionalità in anticipo, e quindi le parti che devono essere estensibile. Questo è relativamente facile per una semplice classe che viene utilizzato allo stesso modo in tutte le app. Ho citato l'esempio di registrazione. Questo è ciò che si riferisce Glass come il riutilizzo-in-the-small .

Ma non stiamo parlando di semplici classi. Se si tenta di fare la stessa cosa con un modulo complessa (si pensi più classi di gestire più schermi, forme, schema di database diversi, ecc), è troppo difficile da scrivere il codice per essere sufficientemente generico per coprire tutte le esigenze specifiche di ogni applicazione. Si finisce che necessitano di più codice nel modulo generico rispetto al codice somma totale avresti bisogno di scrivere moduli separati per ogni app.

Inoltre, il test diventa molto costosa, perché ogni modifica apportata al modulo di base richiede che si ri-test tutti le applicazioni che utilizzano ed estenderlo.

Alla fine, è meno lavoro per scrivere un nuovo modulo per ogni app, e si può ottenere ciò che l'efficienza è possibile impiegando componenti riutilizzabili che sono più a grana fine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top