Quando si progetta un sistema, è buona norma soddisfare il progetto attorno al framework che verrà utilizzato?


37

Quando si sviluppa un sistema o un'applicazione che si prevede di utilizzare con un determinato framework, è consigliabile progettare il sistema senza il framework in mente, oppure è meglio progettare il sistema con la mentalità "bene il framework avrebbe un tempo più facile con questo".


4
Di che tipo di quadro stai parlando? Intendi un quadro di nicchia specifico per il business progettato per risolvere problemi molto specifici del dominio per un determinato settore? (ad es. medicina, nucleare, difesa, aviazione, ecc.). Oppure stai parlando di framework per scopi generici progettati per risolvere problemi tecnici?
Ben Cottrell,

1
framework per scopi generali progettati per risolvere problemi tecnici
Robert Pounder,

2
Piccola scala per mancanza di tempo (sono al lavoro, potrei elaborare in seguito): sto scrivendo un sistema che genera e-mail basate su progetti. - Se scrivessi questo in Laravel, probabilmente userei il loro "motore" di template per progettare le e-mail, il che renderebbe la progettazione del sistema molto più semplice in termini di flusso. Tuttavia, dovrei scrivere un motore di template se lo stavo facendo PHP alla vaniglia o trovare un altro sistema di template alternativo adatto. Si aggiungerebbe al processo di progettazione, a cui fa riferimento anche la domanda.
Robert Pounder,

3
Questa domanda genererà un sacco di risposte molto diverse perché sia ​​"framework" che "design" sono parole sovraccaricate di molteplici significati nel nostro settore. Inoltre, anche per una singola definizione di framework come "framework per scopi generali progettati per risolvere problemi tecnici", dipenderà dal framework specifico - alcuni framework sono più motivati ​​di altri.
stannius

1
Sarebbe troppo brutto essere investiti da un autobus mentre si perde la testa cercando di progettare un veicolo di trasporto pubblico su ruote.

Risposte:


51

Il tuo design dovrebbe soddisfare le esigenze dei clienti il ​​più vicino possibile. Ricorda che il design include piccole cose come:

  • Esperienza utente
  • Funzionalità
  • Come comunicano parti dell'applicazione (con se stessa o entità esterne)

Nessuna di queste cose dovrebbe essere dettata dal quadro. Se è chiaro che dovrai combattere il tuo framework per raggiungere questi obiettivi, allora scegli un nuovo framework che ti aiuterà a raggiungere quegli obiettivi prima di iniziare a scrivere codice.

Dopo aver scelto un set di strumenti appropriato (il framework è uno strumento), quindi consiglio di utilizzare gli strumenti nel modo in cui sono progettati per essere utilizzati. Più si discosta dal design del framework, più si aumenta la curva di apprendimento per il proprio team e maggiori sono le probabilità che qualcosa vada storto.

In breve

  • Design per i tuoi utenti
  • Scegli gli strumenti appropriati per realizzare il tuo design
  • Usa i tuoi strumenti nel modo in cui sono progettati per essere utilizzati

Ulteriori pensieri:

Dopo oltre 20 anni di ingegneria del software e utilizzo di numerosi framework, ho imparato un paio di lezioni. Tutti i framework sono un'arma a doppio taglio: entrambi vincolano e consentono. Il problema di decidere il tuo framework prima di guardare ai grandi 3 che ho menzionato sopra è che potresti compromettere una buona esperienza utente per una mediocre (nella migliore delle ipotesi). Oppure potresti essere costretto a deviare dalla progettazione dei framework per ottenere alcune funzionalità specifiche.


3
Quindi è necessario fare alcune trattative con il cliente. Spiega cosa puoi e non puoi fare con i vincoli che hanno imposto. Proponi come può cambiare se scegli X framework. Potrebbero non essere disposti a cambiare e sono disposti a vivere con un'esperienza degradata. Oppure potrebbero decidere di sapere cosa stai facendo e di fidarti di te. Dipende dal cliente. Alla fine, gestisci le loro aspettative.
Berin Loritsch,

4
Sembra esserci una certa confusione tra i diversi livelli di progettazione qui: progettazione del sistema e progettazione dettagliata. Per me, questa domanda si poneva sulla progettazione dettagliata (il metodo di implementazione) piuttosto che sul sistema (interfacce, concorrenza, volume di dati, interfaccia utente, tipo di utente).
Gusdor,

2
Se la domanda gira intorno al "design tecnico", la lingua e il sistema operativo potrebbero avere delle deduzioni nel design. Tuttavia, il design non è implementazione. Se stai pensando alle capacità di Frameworks, non è design, è implosione. Se si basano le proprie decisioni di progettazione sui punti di forza del quadro, prepararsi a subirne la debolezza. E quando la debolezza soddisfa i requisiti, hai un grosso problema. Le più grandi aziende non hanno costruito i loro quadri per piacere.
Laiv,

1
@Laiv Ottimo commento! Davvero, è "alcuni e alcuni". Un fucile e una pistola possono entrambi fissare cose, una è più reversibile dell'altra e funziona anche più lentamente ed è più complessa. Ogni scelta che la gente fa è inevitabilmente un compromesso. Paghi i tuoi soldi e rischi.

1
@RobertPounder, è uno strumento la cui idoneità per una soluzione deve essere decisa durante la progettazione del sistema. Capisco come i framework possano influenzare il design, ma non dovrebbero dettarlo.
Berin Loritsch,

27

I framework influenzano naturalmente la progettazione di moduli e sottosistemi specifici (come un front-end della GUI). Come menzionato nell'altra risposta, avrai un momento difficile se ti ritrovi a combattere contro il / i quadro / i prescelto / i.

Più in generale, tuttavia, si dovrebbe evitare di lasciare che qualsiasi singolo framework o tecnologia dettino o guidino il "quadro generale" dell'architettura generale del sistema. La maggior parte dei framework applicativi per scopi generici non incoraggia questo, quindi se ti ritrovi a scrivere l'intero sistema attorno a un framework, probabilmente stai facendo qualcosa che gli autori di quel framework non intendevano.

Probabilmente userete molti framework diversi per risolvere problemi diversi; man mano che il tuo sistema diventa più complesso, devi stare attento a non costruire The Big Ball Of Mud . Ove possibile, mantieni il tuo sistema modulare e liberamente accoppiato. Alcuni framework potrebbero essere tenuti meglio dietro le astrazioni scrivendo wrapper e adattatori che "nascondono" i flussi di lavoro specifici del Framework lontano da altri componenti. I toolkit GUI tendono a servire solo la funzionalità GUI front-end, quindi quei moduli GUI dovrebbero essere tenuti lontani dal resto del sistema.

Non esistono framework di uso generale (come framework dell'interfaccia utente, framework di layer di dati, ecc.) Per prescrivere l'architettura completa del sistema - al massimo potrebbero prescrivere la progettazione di un componente o modulo; ad esempio, alcune tecnologie GUI sono orientate verso particolari schemi MV *.

L'architettura generale del sistema dovrebbe essere guidata principalmente dai requisiti aziendali . Potresti trovarti appoggiato pesantemente a un particolare strumento (ad esempio, uno strumento di middleware di messaggistica o un framework ORM) al fine di legare tutto insieme, ma se hai incapsulato il framework in un'astrazione come una classe di "servizio", è meno probabile trovarti vincolato da quel quadro quando incontri i suoi limiti.

Cerca di tenere a mente quanto segue per il tuo disegno a grande immagine:


A volte sembra che ad alcuni autori del framework non dispiaccia affatto che i loro utenti scrivano il codice dell'applicazione strettamente associato al framework.
VIENI DAL

2
@COMEFROM - Gli sviluppatori dovrebbero incoraggiare un accoppiamento stretto del codice a un framework perché presumono che tu abbia scelto il loro framework per risolvere gli stessi problemi per cui lo hanno progettato in primo luogo.
JeffO,

Sei andato un po 'fuori tema, passando dai principi di progettazione ai principi di codifica, ma ottengo il jist di ciò che dici, e se il requisito aziendale è quello di utilizzare un determinato quadro? (penso che l'outsourcing aziendale e gli sviluppatori interni conoscano solo una lingua) Penso che dovrei renderlo più chiaro nel post originale.
Robert Pounder,

1
@RobertPounder Il vero punto a cui stavo cercando di capire (forse non molto bene) è che a volte c'è la tendenza delle persone a utilizzare determinati framework come "grounding" per la loro intera applicazione, il che porta inevitabilmente alla logica di business e ad altri codice non correlato che viene fuso in modo inappropriato in tale framework, ad esempio la logica di business associata ai controlli dell'interfaccia utente solo perché all'epoca era veloce e facile. È molto facile farlo, quindi è qualcosa di cui diffidare
Ben Cottrell,

2
Non sono d'accordo con @nocomprende qui; non è possibile prevedere tutti i requisiti futuri, ma a volte i sistemi vengono riscritti semplicemente perché il software precedente è troppo difficile da estendere / mantenere .
SeldomNeedy,

7

Sì, dovresti attenersi il più vicino possibile a ciò che il framework "ti dice" di fare.

Il motivo è semplicemente che più ti avvicini al modo di "pensare" dei framework, più facile sarai in grado di parlare con altri sviluppatori dei tuoi problemi / idee che usano anche quel framework.

Aumenta l'interoperabilità e la facilità d'uso per le altre persone che lo usano in seguito, capirai e incorporerai meglio tutorial o soluzioni comuni se ti atterrai alla filosofia di base di qualunque cosa tu stia usando.

L'unica buona ragione per cui riesco a pensare al motivo per cui "rompi" il framework è che hai assolutamente bisogno di qualcosa che non può fornire, data la sua configurazione / applicazione "predefinita" dei principi. Ma allora, potrebbe non essere il quadro giusto per cominciare.

Fondamentalmente, questo può essere applicato anche ad altre decisioni. Dovresti usare la lingua che stai usando tanto attentamente quanto è destinata a essere utilizzata, perché semplifica le cose se parli la stessa lingua di tutti gli altri.


Forse dovresti rivedere la tua risposta a causa delle modifiche della domanda. La tua risposta in realtà non risponde alla domanda del PO.
Laiv,

1
@Laiv Non vedo come non risponda alla domanda, anche se potrebbe non corrispondere alla tua opinione sull'argomento, è comunque una risposta. Sei il benvenuto a scrivere la tua risposta per mostrare la natura contrastante dell'argomento in questione.
FP

Mi scusi se non ho spiegato bene me stesso. Non sono fluente in inglese come vorrei essere. Volevo solo dire che, IMO, la domanda e la tua risposta parlano di cose diverse. Se pensi che non lo facciano, va bene. Non lo discuterò. Questo è tutto.
Laiv

1
Questo è assolutamente. È simile a come funzionano le lingue specifiche del dominio e idee simili. I tuoi prodotti sono modellati dallo strumento (Framework) e non viceversa. Il Framework "vince". Se non puoi sposarlo, scegline uno diverso. (Suggerimento: non esiste un framework ideale . Basta

1
Il tuo design dovrebbe influenzare il framework che scegli (se presente!), Non viceversa.
RubberDuck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.