Wenn Sie die Architektur des Systems formalisieren, ist es wichtig, dass Sie nicht nur den Wert verstehen, den die Architektur für den Tisch mit sich bringt, sondern auch verstehen und schätzen, was sie sein sollte.
Das Hauptziel von Software oder technischer Architektur besteht darin, die nicht funktionalen Anforderungen zu identifizieren, die durch die Qualitätsattribute realisiert werden, die die Systemarchitektur steuern .
Zu nicht funktionalen Anforderungen:
Eine nichtfunktionale Anforderung ist eine Anforderung, die Kriterien festlegt, anhand derer der Betrieb eines Systems beurteilt werden kann, und nicht bestimmte Verhaltensweisen. Sie stehen im Gegensatz zu funktionalen Anforderungen, die ein bestimmtes Verhalten oder bestimmte Funktionen definieren. Der Plan zur Umsetzung der funktionalen Anforderungen ist im Systementwurf aufgeführt. Der Plan zur Implementierung nichtfunktionaler Anforderungen ist in der Systemarchitektur beschrieben.
Im Allgemeinen definieren funktionale Anforderungen, was ein System tun soll, und nicht funktionale Anforderungen, wie ein System sein soll. ... Nichtfunktionale Anforderungen werden häufig als "Qualitätsattribute" eines Systems bezeichnet. Andere Ausdrücke für nichtfunktionale Anforderungen sind "Qualitäten", "Qualitätsziele", "Dienstqualitätsanforderungen", "Einschränkungen" und "Nicht-Verhaltensanforderungen".
Natürlich ist es bei einem Greenfield-Projekt sinnvoll, die architektonisch bedeutsamen Anforderungen zu identifizieren. Wenn Sie jedoch mit vorhandener Software arbeiten, sollten Sie so diszipliniert wie möglich vorgehen. Sie möchten nicht, dass Ihre Softwarearchitektur vom vorhandenen System beeinflusst wird.
Software-Architektur, um maßgeblich zu sein, muss wirklich 3 Dinge sein.
Deklarativ
Dies ist der Teil der Dokumentation, in dem Sie NICHT erklären, WAS IST, sondern wie die Dinge SEIN SOLLTEN. Wir tun dies durch die Verwendung verschiedener Architekturansichten des Systems. Wir definieren die Komponenten, die sein sollen, wie sie interagieren, und führen dann optional einen Drilldown in jede Komponente durch, um detailliertere Ansichten zu erhalten, in denen festgelegt wird, wie das System gestaltet werden soll.
Dies ist eine wichtige Unterscheidung. Das Systemdesign sollte durch die Systemarchitektur eingeschränkt werden, es handelt sich in der Tat um separate, aber verwandte Dinge.
Begründung
Das Grundprinzip Ihrer Softwarearchitektur ist das, was den getroffenen Architekturentscheidungen Legitimität und Autorität verleiht. Vielleicht wurde die Entscheidung getroffen, einen Pub / Sub-Ereignis-Listener über MQ zum Auslösen eines Batch-Jobs zu verwenden, und Sie stellen dies grafisch dar?
Warum wurde diese Entscheidung getroffen? Wir erklären, warum dies so ist, und verknüpfen unsere Erklärung mit nicht funktionalen Anforderungen, Qualitätsattributzielen oder architektonisch bedeutsamen Anforderungen. (Z. B. Jobs müssen asynchron und wiederholbar sein. Die Wartbarkeit als Qualitätsattribut bewirkt, dass im Falle eines Batch-Jobfehlers Jobs über eine MQ-Nachricht erneut gestartet werden können. Das System muss bei asynchroner Kommunikation keinen Nachrichtenverlust aufweisen. Usw.) ..)
Risiken
Nachdem Sie nun festgelegt haben, wie Architektur sein soll, und dies mit Ihrer Begründung bewiesen haben, können Sie jetzt Risiken für den aktuellen Status des Systems identifizieren, bei denen dies nicht der Fall ist.
(ZB wird die serverseitige Validierung auf dem clientseitigen Javascript-Code dupliziert. Dies stellt eine Verletzung des DRY-Prinzips dar und widerspricht dem Qualitätsmerkmal der Wartbarkeit. In diesem Bereich sind keine nicht funktionalen Anforderungen bezüglich der Leistung definiert.) ist kein Grund für das aktuelle Systemverhalten)
Ihre Risiken können auch grafisch darstellen, wo der aktuelle Status von der Architektur abweicht. Diesen Risiken kann das Entwicklungsteam jetzt entweder über seinen Projektplan oder durch Hinzufügen dieses Risikos zum Rückstand begegnen.