Wie erklären Sie anderen die Trennung von Bedenken?


Antworten:


47

Stellen Sie sich vor, Sie haben ein Programm, das veröffentlicht wurde. Ein Kunde kommt und bietet an, Sie für eine Verbesserung einer seiner Funktionen zu bezahlen. Um an das Geld zu kommen, müssen Sie Ihr Programm ändern, um die neue Funktion hinzuzufügen. Einige der Faktoren, die Ihre Gewinnspanne beeinflussen, sind:

  1. wie viel Code müssen Sie ändern
  2. wie einfach es ist, die Änderungen vorzunehmen
  3. Wie wahrscheinlich ist es, dass Sie vorhandene Funktionen, die von anderen Kunden verwendet werden, außer Kraft setzen?
  4. Wie oft können Sie Ihr vorhandenes Modell / Ihre vorhandene Architektur wiederverwenden?

Durch die Trennung von Bedenken erhalten Sie positivere Antworten auf diese Fragen.

  1. Wenn der gesamte Code für ein bestimmtes Verhalten der Anwendung getrennt ist, müssen Sie nur den Code ändern, der direkt mit Ihrer neuen Funktion verknüpft ist. Welches sollte weniger Code zu ändern sein.
  2. Wenn die Verhaltensweisen, an denen Sie interessiert sind, sauber vom Rest der Anwendung getrennt sind, ist es wahrscheinlicher, dass Sie in der Lage sind, eine neue Implementierung einzutauschen, ohne den Rest des Programms vollständig verstehen oder manipulieren zu müssen. Es sollte auch einfacher sein, herauszufinden, welchen Code Sie ändern müssen.
  3. Code, den Sie nicht ändern müssen, bricht mit geringerer Wahrscheinlichkeit als Code, den Sie ändern. Wenn Sie also die Bedenken aufteilen, können Sie verhindern, dass nicht verwandte Funktionen beschädigt werden, indem Sie den aufgerufenen Code nicht ändern müssen. Wenn Ihre Funktionen verwechselt werden, können Sie versehentlich das Verhalten eines ändern, während Sie versuchen, ein anderes zu ändern.
  4. Wenn Ihre Architektur sich nicht mit technischen oder geschäftlichen Logikdetails befasst, ist es weniger wahrscheinlich, dass Änderungen an der Implementierung neue Architekturfunktionen erfordern. Wenn Ihre Hauptdomänenlogik beispielsweise datenbankunabhängig ist, sollte die Unterstützung einer neuen Datenbank so einfach sein wie das Austauschen einer neuen Implementierung der Persistenzschicht.

1
Ich finde es toll, dass Sie die Antwort fest in der finanziellen Realität verankert haben. Manager haben keine Entschuldigung, schlampig zu sein und dieses grundlegende Konzept zu ignorieren.
Moodboom

10

Schauen Sie sich ein Krankenhaus an und überlegen Sie sich, welche unterschiedlichen Aufgaben bei der Versorgung eines Patienten zu erfüllen sind: Krankenschwestern, Ärzte, Arzthelferinnen, Techniker, Angestellte, Cafeteria usw.

Gibt es jemanden, der weiß, wie all diese Leute ihre Arbeit erledigen? Nein, denn es wäre überwältigend. Sie müssen die verschiedenen Verantwortlichkeiten in verschiedene Rollen aufteilen, und die Berührungspunkte zwischen diesen Rollen sind sehr spezifisch.


5

Wenn er / sie in einem Büro arbeitet, nehmen Sie es als Beispiel, erläutern Sie die Rolle der einzelnen Mitarbeiter in diesem Büro und fragen Sie ihn, was passiert, wenn diese Mitarbeiter nicht nach ihren Aufgaben aufgeteilt werden?


1

Ich würde mir ansehen, wie er es versäumt hat, SoC in seinem Code / Design anzuwenden, und das in ein reales Beispiel verwandeln, mit dem er sich identifizieren kann, und das ist offensichtlich unerwünscht.

Wenn er beispielsweise eine Klasse hat, in der der Kunde mehrere Informationen liefern muss, die für diese Kunden nicht relevant sind, dann würde ich die Analogie einer Bäckerei verwenden, in der Sie Ihre eigenen Körner und Hefen mitbringen müssen, wenn Sie kaufen möchten ein Brot.


-3

Ein Beispiel könnte sein, dass ein HTML-Entwickler HTML, CSS und Javascript in separate Dateien aufteilen möchte. Auf diese Weise können Sie das Erscheinungsbild einer Nachricht ändern, indem Sie einfach das CSS oder das Verhalten einer Nachricht ändern, indem Sie die JavaScript-Datei ändern, die separat geladen wird. Wenn Sie eine responsive oder adaptive Site haben, funktioniert dieses Paradigma gut, da Sie je nach Ansichtsfenster des Benutzers oder Benutzeragenten verschiedene CSS- oder Javascript-Dateien laden können. Wenn Sie jedoch den HTML-Code oder die Vorlage ändern, besteht die Möglichkeit, dass die CSS- oder JavaScript-Funktion nicht mehr funktioniert. Diese getrennten Anliegen können auch abhängig sein.

Ein weiterer Ansatz besteht darin, Ihr gesamtes CSS-Javascript und HTML in einer Gruppe von Komponenten oder Modulen zu bündeln. Dies bedeutet, dass Sie Änderungen an einem Modul vornehmen können und dass dies keine Auswirkungen auf andere Komponenten oder Module auf der Seite haben sollte, auf der es ausgeführt wird und die nicht miteinander verknüpft sind. Hier werden die CSS-, Js- und HTML-Dateien zu einer einzigen Komponente zusammengeführt, die Unit-getestet werden kann. Die Trennung der Bedenken erfolgt also in Form einzelner atomarer Komponenten, die einheitlich getestet werden können, anstatt Markup-, Styling- und Verhaltenselemente zu trennen. Dieser zweite Ansatz eignet sich eher zum Erstellen komplexerer Webanwendungen.

bearbeiten. Da ich eine negative Antwort auf diesen Kommentar erhalten habe, dachte ich, ich würde ihn noch einmal besuchen und versuchen, einen Teil meiner POV zu qualifizieren. Leider ist jegliches Feedback hier nicht besonders konstruktiv, aber ich habe eine interessante Diskussion an anderer Stelle gesehen, die sich mit React befasst, der aktuellen heißen Technologie in der Webentwicklung, einem Beispiel aus der Praxis, und fragt, ob sie die Trennung von Bedenken bricht oder insbesondere, ob sie eine von ihnen bricht Das Prinzip der objektorientierten Entwurfsmethodik von Feather.

Die technische JavaScript-Entwicklerperspektive

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.

Die UX / UI Designer-Perspektive

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.

Die Teamperspektive

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

Auf der Seite befindet sich auch ein Link zu einer interessanten Präsentation von Pete Hunt von Facebook, in der er über Komponenten und nicht über Vorlagen spricht und die Probleme in der Sprachanwendung aufteilt, anstatt die Probleme des Frameworks, dh Vorlagen, CSS und Javascript etc.

Im Hinblick auf die Trennung Ihrer Bedenken in der Sprache Ihrer Anwendung kann dies die Verwendung verschiedener Muster beinhalten, um Ihren Code in eine modulare Form zu trennen oder zu entkoppeln, die einheitlich getestet werden kann usw.

Zusammenfassend kann die Trennung von Bedenken von Ihrer Rolle oder Sichtweise abhängen, wie an anderer Stelle erwähnt.


1
Dies scheint nichts Wesentliches zu bieten über Punkte, die in den vorherigen 7 Antworten gemacht und erklärt wurden
Mücke

Ich möchte nur darauf hinweisen, dass die Trennung von Anliegen je nach Kontext unterschiedliche Ansätze haben kann. Dies kommt einer realen Situation in der Softwareentwicklung näher, und ich unterstreiche, dass Sie bei der Arbeit an HTML-Seiten unterschiedliche Ansätze verfolgen können, die auf den ersten Blick widersprüchlich erscheinen.
Daniel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.