Come spieghi agli altri la separazione delle preoccupazioni?


Risposte:


47

Immagina di avere un programma che è stato rilasciato. Un cliente arriva e si offre di pagarti per un miglioramento di una delle sue funzionalità. Per ottenere i soldi, dovrai cambiare il tuo programma per aggiungere la nuova funzionalità. Alcune delle cose che influenzeranno il tuo margine di profitto sono:

  1. quanto codice devi cambiare
  2. quanto è facile apportare le modifiche
  3. quanto è probabile che si rompano le funzionalità esistenti utilizzate da altri clienti
  4. quanto puoi riutilizzare il tuo modello / architettura esistente

La separazione delle preoccupazioni ti aiuta a ottenere risposte più positive a queste domande.

  1. se tutto il codice per un determinato comportamento dell'applicazione è separato, dovrai solo modificare il codice direttamente associato alla tua nuova funzionalità. Quale dovrebbe essere meno codice da modificare.
  2. se i comportamenti a cui sei interessato sono nettamente separati dal resto dell'applicazione, è più probabile che tu sia in grado di scambiare una nuova implementazione senza dover comprendere o manipolare completamente il resto del programma. Dovrebbe anche essere più facile scoprire quale codice è necessario modificare.
  3. Il codice che non è necessario modificare ha meno probabilità di rompersi rispetto al codice che si modifica. Quindi suddividere le preoccupazioni ti aiuta a evitare la rottura di funzionalità non correlate impedendoti di dover modificare il codice che potrebbero chiamare. Se le tue funzionalità sono confuse, potresti cambiare il comportamento di uno per caso mentre provi a cambiarne un altro.
  4. Se la tua architettura è indipendente dai dettagli tecnici o logici aziendali, è meno probabile che le modifiche all'implementazione richiedano nuove funzionalità architettoniche. Ad esempio, se la logica del dominio principale è indipendente dal database, supportare un nuovo database dovrebbe essere facile come scambiare una nuova implementazione del livello di persistenza.

1
Adoro che tu abbia reso la risposta saldamente ancorata alla realtà finanziaria. I manager non hanno scuse per essere sciatti e ignorare questo concetto fondamentale.
moodboom,

10

Guarda un ospedale e pensa a tutti i diversi ruoli che sono coinvolti nella fornitura di cure a un paziente: infermieri di triage, medici, assistenti medici, tecnici, impiegati, mensa, ecc.

C'è una persona che sa come tutte quelle persone ottengono il loro lavoro? No, perché sarebbe travolgente. Devono separare le diverse responsabilità in ruoli distinti e i punti di contatto tra questi ruoli sono molto specifici.


5

Se lavora in un ufficio, prendilo come esempio, spiega il ruolo di ciascun personale in quell'ufficio e chiedigli, cosa accadrebbe se quel personale non fosse diviso in base al proprio lavoro?


1

Vorrei vedere come non è riuscito ad applicare il SoC nel suo codice / design e trasformarlo in un esempio del mondo reale con cui può relazionarsi e che è ovviamente indesiderato.

Ad esempio, se ha una classe in cui il cliente deve fornire diverse informazioni che non sono rilevanti per quei clienti, allora userei l'analogia di una panetteria in cui devi portare i tuoi cereali e lievito se vuoi acquistare un pane.


-3

Un esempio potrebbe essere uno sviluppatore HTML che potrebbe voler separare HTML, CSS e JavaScript in file separati. In questo modo puoi cambiare l'aspetto di qualcosa da dire semplicemente modificando il CSS o il comportamento di qualcosa cambiando il file javascript che viene caricato separatamente. Se si dispone di un sito reattivo o adattivo, questo paradigma funziona bene in quanto è possibile caricare diversi CSS o JavaScript a seconda del viewport o dell'agente dell'utente. Tuttavia, se modifichi l'html o il modello, è probabile che il CSS o il JavaScript possano rompersi. Queste preoccupazioni separate possono anche dipendere.

Un altro approccio è quello di raggruppare tutti i tuoi CSS CSS e HTML in un gruppo di componenti o moduli. Ciò significa che è possibile apportare modifiche a un modulo e che non dovrebbe influire su altri componenti o moduli nella pagina che viene eseguito a fianco di quelli non correlati. Qui i file css, js e html vengono uniti in un singolo componente che può essere testato in unità. Quindi la separazione delle preoccupazioni si presenta sotto forma di singoli componenti atomici che possono essere testati in unità piuttosto che separazione di markup, stile ed elementi comportamentali. Questo secondo approccio è più adatto alla creazione di applicazioni Web più complesse.

modificare. Da quando ho ricevuto una risposta negativa a questo commento, ho pensato di rivederlo e provare a qualificare un po 'del mio pov. Sfortunatamente qualsiasi feedback qui non è particolarmente costruttivo, ma ho visto un'altra discussione interessante altrove che esamina React, l'attuale tecnologia calda nello sviluppo web, un esempio del mondo reale, e mi chiede se rompe la separazione delle preoccupazioni o in particolare se rompe uno dei i principi della metodologia di progettazione orientata agli oggetti SOLID di Feather.

La prospettiva tecnica dello sviluppatore JavaScript

NO, because JSX is a view language. That's one responsibility.
BUT, this implies that the JS developer is self-enforcing SoC/SRP on his own      architecture by not mixing ViewModel concerns in his JSX. This type of vigilance "in the wild" is highly suspect because JSX involves the full JavaScript dialect.

La prospettiva del progettista UX / UI

YES, because JSX mixes Semantic Content (Model) with Behavior (Controller)
YES, because the intrusion, specifically of JavaScript, into the Semantic Model makes it difficult or impossible for me to play my role and leverage my expertese and skills.

La prospettiva della squadra

NO, if both...
Separate files are used for the View (JSX) and ViewModel (JS).
Either there aren't UI/UX/Designers involved, or they are productive working    directly with JSX (not very common).
YES, if either...
Everything is in the same file, causing problems for version control or productive use of modern editors.
Members of the team who are comfortable with HTML/CSS but less capable with JavaScript are excluded because of mixture or roles.

https://hashnode.com/post/does-react-really-violate-separation-of-concern-by-putting-html-and-js-in-a-single-file-cil3bn5hj0011a65347rsdut0

Inoltre sulla pagina è presente un collegamento a un'interessante presentazione di Pete Hunt, di Facebook, in cui parla di componenti e non di modelli, e di separare le preoccupazioni nell'applicazione linguistica piuttosto che di separare le preoccupazioni del framework, ovvero modelli, css e javascript eccetera.

Per quanto riguarda la separazione delle preoccupazioni nella lingua dell'applicazione, ciò potrebbe comportare l'uso di vari schemi per separare o disaccoppiare il codice in una forma modulare che può essere testata in unità, ecc.

Quindi, per riassumere, separare le preoccupazioni può dipendere dal tuo ruolo o punto di vista, come menzionato altrove.


1
questo non sembra offrire nulla di sostanziale rispetto ai punti formulati e spiegati nelle precedenti 7 risposte
moscerino del

Sto solo sottolineando che la separazione delle preoccupazioni può assumere approcci diversi a seconda del contesto. Questo è più vicino a una situazione del mondo reale in termini di ingegneria del software e sto sottolineando che ci sono diversi approcci che puoi adottare quando lavori su pagine html che all'inizio possono sembrare contraddittorie.
Daniel,
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.