Inhaltsverzeichnis
1. Verantwortungsverteilung und verantwortliches Design
2. Analyse der GRASP-Muster einzeln
Heim Backend-Entwicklung C#.Net-Tutorial Eine kurze Diskussion über das GRASP-Softwareentwicklungsmodell

Eine kurze Diskussion über das GRASP-Softwareentwicklungsmodell

Mar 31, 2017 am 11:52 AM

Sind Sie ein guter Softwareentwickler? Kennen Sie GRASP? Das GRASP-Softwareentwicklungsmodell, der vollständige Name lautet General Responsibility Assignment Software Patterns, ist ein weiteres Softwareentwicklungsmodell, das so berühmt ist wie das berühmte Softwaremodell GoF (Gang of Four, die 23 Softwareentwicklungsmodelle, die wir oft als Modell bezeichnen). Aber im Gegensatz zu GoF schlägt es keine spezifischen Software-Organisationsstrukturen vor, sondern schlägt vielmehr vor, was wir bei der Abstraktion realer Geschäftsfunktionen in spezifische Objekte in der Softwareentwicklung befolgen sollten . Nur wenn wir diese Grundprinzipien befolgen, können wir hochwertige Software entwickeln. Für die Softwareprojekte, die wir entwickeln möchten, müssen wir nicht das Factory-Muster verwenden, wir müssen nicht das Singleton-Muster verwenden, wir müssen es nicht verwenden das Beobachtermuster, aber es ist für uns unmöglich, in der Softwareentwicklung reale Geschäftsfunktionen nicht in konkrete Objekte zu abstrahieren. Aus dieser Perspektive müssen wir die Qualität unserer Softwareentwicklung verbessern. Ein tiefes Verständnis von GRASP ist wichtiger als ein tiefes Verständnis von GoF. Aber ich sehe, dass es viele Artikel gibt, die GoF vorstellen, und nur wenige Artikel, die GRASP vorstellen. Aus diesem Grund stelle ich GRASP jetzt allen vor. GRASP enthält 9 Modelle, die 9 Grundprinzipien darstellen. Dies wird im klassischen Buch „UML and Pattern Application“ des Software-Design-Guru Craig Larman ausführlich erläutert. GRASP wird als „General Responsibility Assignment Software Pattern“ bezeichnet. Um GRASP zu verstehen, müssen wir zunächst die Frage verstehen, warum wir während des Objektanalyse- und Designprozesses Verantwortlichkeiten zuweisen müssen.


1. Verantwortungsverteilung und verantwortliches Design

Zu Beginn eines Softwareprojekts müssen wir normalerweise eine Anforderungsanalyse durchführen, um zu verstehen, welche Art von Software der Kunde entwerfen muss und welche Funktionen die Software hat hätte haben sollen. Die Anforderungsanalyse versteht die Geschäftsfunktionen, die Kunden in der realen Welt benötigen. Jede Geschäftsfunktion ist häufig ein Geschäftsprozess, dh der Geschäftsprozess, den Kunden weiterhin in ihrer täglichen Arbeit ausführen. Gleichzeitig muss es in der Problemwelt des Benutzers einige Dinge oder Dinge geben, die miteinander zusammenhängen.
Nehmen Sie als Beispiel ein Software-Review-Management-System. Die Geschäftsanforderungen des Bewertungsmanagementsystems lauten wie folgt:
1. Der Überprüfungsorganisator entwickelt einen Überprüfungsplan, legt ihn dem Leiter zur Genehmigung vor und benachrichtigt dann die Prüfer per E-Mail.
2. Die Prüfer werden aufgefordert, die Prüfobjekte jeweils zu prüfen, das Prüfformular auszufüllen und können Fragen zu den Prüfobjekten stellen.
3. Der Review-Organisator fasst die Fragen der Gutachter zusammen und hält ein Review-Meeting ab, um diese Fragen zu besprechen. Bei dem Treffen wurden einige Fragen zu Problemen, einige Fragen waren keine Probleme und einige konnten immer noch nicht bestätigt werden.
4. Nach der Besprechung sortiert der Review-Organisator die Fragen und erstellt einen Review-Bericht. Anschließend stimmen die Gutachter darüber ab, ob die Review bestanden wird oder nicht. Abschließend fasst der Review-Organisator die Abstimmungsergebnisse zusammen und bildet ein Review-Fazit.
5. Review-Organisatoren verfolgen die Lösung von Problemen.
Durch die Beschreibung der oben genannten Anforderungen fällt es uns nicht schwer, verwandte Dinge in der gesamten Problemwelt zu finden: Überprüfungsorganisator, Überprüfungsplan, Prüfer, Überprüfungsobjekt, Überprüfungsformular, Fragen, Überprüfungsbericht, Überprüfungsschlussfolgerung usw Fragen. Für uns ist es nicht schwierig, die Beziehung zwischen diesen Dingen zu analysieren. Beispielsweise sind der Überprüfungsplan und die Prüfer eine Eins-zu-Viele, während der Überprüfungsbericht und die Schlussfolgerungen der Überprüfung eine Eins-zu-eins sind.
In RUP bilden Geschäftsanforderungen Anwendungsfälle im Modell und seine Beschreibungsdokumente, und Dinge und ihre Beziehungen bilden Objekte im Domänenmodell. Natürlich, wie man Anwendungsfallmodelle und Domänen erstellt Modelle gehen über diesen Artikel hinaus. In Bezug auf den Umfang der Diskussion können interessierte Freunde relevante Artikel lesen.
Die Objekte im Domänenmodell werden zur Grundlage für die Bildung spezifischer Objekte in der Softwareentwicklung (welche Objekte in der Softwareentwicklung gebildet werden, hängt von den spezifischen Anforderungen der Softwareentwicklung ab und muss nicht unbedingt mit den Objekten übereinstimmen). des Domänenmodells). Die Anwendungsfälle im Anwendungsfallmodell werden durch die Zuweisung von Verhaltensweisen zu diesen Objekten implementiert. Nun stellt sich die Frage, wie diesen Objekten die Funktionen im Anwendungsfallmodell bzw. eine Reihe von Verhaltensweisen zugeordnet werden sollen. Mit anderen Worten: Um dieselbe Aufgabe zu erledigen, kann ich Verhalten A dem Objekt X oder dem Objekt Y zuordnen. Obwohl meine spezifische Implementierung von Verhalten A unterschiedlich ist, wenn ich es an Objekt X übergebe, und wenn ich es an Objekt Y übergebe, können beide die Aufgabe von Verhalten A erfüllen. Soll ich es also an Objekt X oder Objekt Y übergeben? Gibt es ein Grundprinzip? Ja, das heißt, Aufgaben nach Verantwortlichkeiten zu verteilen. Obwohl ich theoretisch Objekte willkürlich definieren, Objekte bedeutungslos machen oder willkürliche Aufgaben ausführen kann, entwerfen wir normalerweise nicht auf diese Weise. Normalerweise verbinden wir Objekte mit realen Objekten, z. B. beim Entwerfen eines Überprüfungsplanobjekts und eines Prüferobjekts. Und wir sollten beim Entwerfen von Objekten einen „geringen Darstellungsunterschied“ erreichen. Ein geringer Darstellungsunterschied bedeutet, dass die von uns entworfenen Objekte so konsistent wie möglich mit realen Objekten sein sollten. Wir entwerfen beispielsweise ein Objekt namens „Rezensent“, weil wir Rezensenten in der realen Welt haben. Gleichzeitig sollten die Verhaltensweisen, die wir Prüferobjekten zuweisen, so konsistent wie möglich mit der realen Welt sein, z. B. das Hinzufügen von Prüfern, das Ändern von Prüfern und das Abrufen von Prüferinformationen. Welche Verhaltensweisen diesem Objekt zugeordnet werden sollen, sollte also durch Verantwortlichkeiten bestimmt werden.
Wir entwerfen die Objekte im Softwaresystem durch Analyse der realen Welt oder Analyse des Domänenmodells. Zu diesem Zeitpunkt sollten wir jedem Objekt Verantwortlichkeiten zuweisen. Was ist die Verantwortung eines Objekts? Natürlich wird sie durch die Analyse der realen Welt und der Aufgaben definiert, die dieses Objekt erfüllen soll. Die Verantwortung des Prüferobjekts besteht beispielsweise darin, auf Daten zuzugreifen, die sich auf den Prüfer beziehen. Natürlich ist die Verantwortung des Objekts nicht unbedingt dieselbe. Beispielsweise enthält der Überprüfungsplan die Unterpunkte des Überprüfungsobjekts und des Prüfers, sodass er den Informationszugriff des Überprüfungsobjekts und des Prüfers im Namen des Prüfers verwalten kann Überprüfen Sie das Objekt, wenn die Arbeit nicht beschäftigt ist. Ein Objekt sollte jedoch nicht zu viele Verantwortlichkeiten haben (nur 2 oder 3) und eng miteinander verbunden sein. Wenn beispielsweise dem Objekt des Bewertungsformulars die Verantwortung zugewiesen wird, das Bewertungsformular zu bearbeiten und auch die Daten des Bewertungsplans zu verarbeiten, spricht man von einer Verantwortungsunabhängigkeit.
Verantwortungsverteilung wird mittlerweile allgemein als Prinzip anerkannt, dem ein exzellentes Software-Design folgen sollte. Es hat die folgenden Vorteile:
1. Geringe Darstellungsunterschiede machen Software klar strukturiert und leicht verständlich, da Softwareentwicklung keine Ein-Personen-Angelegenheit ist. Bei Softwareprojekten, die von mehreren Personen entwickelt werden, kann eine klare Softwarestruktur unnötige Fehler vermeiden, die durch Missverständnisse der Entwickler verursacht werden.
2. Einfach zu warten und zu wechseln. Wenn es ein Problem mit dem Prüfplan gibt oder eine Änderung erforderlich ist, wenden wir uns an den Prüfplan. Wenn es ein Problem mit dem Prüfer gibt, wenden wir uns an den Prüfer, und es wird niemals etwas mit anderen Parteien zu tun haben .
Diese Art von Objektdesign- und Komponentenansatz, der Objekte, Verantwortlichkeiten und Zusammenarbeit berücksichtigt, wird „Responsibility Drive Design (RDD)“ genannt. Verantwortungsgesteuertes Design umfasst zunächst das Entwerfen von Anwendungsfallmodellen, Anwendungsfallmodellbeschreibungen, Betriebsverträgen, Systemsequenzdiagrammen, Domänenmodellen und Glossaren und anschließend die schrittweise Erstellung von Analysemodellen und Entwurfsmodellen sowie das Schreiben von Interaktionsdiagrammen und Klassendiagrammen für jedes Auf den komplizierten Prozess werde ich hier nicht näher eingehen. Beachten Sie jedoch ein sehr wichtiges Detail. Wie bereits erwähnt, werden Objekte in Softwaresystemen von der realen Welt abstrahiert. Die Zuweisung von Objektverantwortlichkeiten basiert auf der Definition des Objekts und weist einige wenige und eng miteinander verbundene Aufgaben zu. Doch selbst wenn wir diese Prinzipien befolgen, verfügen wir immer noch über eine beträchtliche Designflexibilität. Verschiedene Menschen haben immer noch unterschiedliche Designs für dieselbe Funktion, basierend auf ihrem eigenen Verständnis. GRASP wird auf Chinesisch als „General Responsibility Assignment Software Pattern“ übersetzt und stellt mehrere Grundprinzipien für die Frage der Verantwortungszuweisung bei der Objektanalyse und dem Design vor. Gleichzeitig sollten diese Grundprinzipien aber auch bis zu einem gewissen Grad verstanden werden, das heißt, sie sind nicht in allen Situationen anwendbar und auch kein absoluter Indikator. Eine geringe Kopplung bedeutet beispielsweise keine absolute Nichtkopplung. Ohne Kopplung kann eine hohe Kohäsion nicht unendlich hoch sein, da das System sonst kompliziert und abnormal wird.


2. Analyse der GRASP-Muster einzeln

GRASP-Software Designmuster umfasst 9 Muster: Ersteller, Informationsexperte, Niedrig Kopplung, Controller, hohe Kohäsion, Polymorphismus, reine Fiktion, Indirektion, Mutationsverhinderung.

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über das GRASP-Softwareentwicklungsmodell. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie man mit Sonderfiguren in der C -Sprache umgeht Wie man mit Sonderfiguren in der C -Sprache umgeht Apr 03, 2025 pm 03:18 PM

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

Was ist die Rolle von CHAR in C -Saiten? Was ist die Rolle von CHAR in C -Saiten? Apr 03, 2025 pm 03:15 PM

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Wie man verschiedene Symbole in der C -Sprache verwendet Wie man verschiedene Symbole in der C -Sprache verwendet Apr 03, 2025 pm 04:48 PM

Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Der Unterschied zwischen char und wchar_t in der C -Sprache Der Unterschied zwischen char und wchar_t in der C -Sprache Apr 03, 2025 pm 03:09 PM

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

Der Unterschied zwischen Multithreading und asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

So verwenden Sie char Array in C -Sprache So verwenden Sie char Array in C -Sprache Apr 03, 2025 pm 03:24 PM

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

Was ist die Funktion der C -Sprachsumme? Was ist die Funktion der C -Sprachsumme? Apr 03, 2025 pm 02:21 PM

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

See all articles