mk-prg-net \se \architecture

Architektur

Was ist Softwarearchitektur ?

Die Gliederung eines Softwaresystem auf abstrakter Ebene in Komponenten und das Zusammenspiel zwischen diesen wird als Softwarearchitektur bezeichnet. Q: Wikipedia
Mit Softwaresystem kann eine vollständige Anwendung wie die Enzyklopädie Wikipedia, oder eine einzelne Softwarebibliothek wie mko.Astro gemeint sein.

Die Softwarearchitektur wird durch folgenden Faktoren beeinflusst:

Blaupausen moderner Architekturen

Unter folgendem Linkt stellt Microsoft einen Satz von Blaupausen für moderen, Cloud- basierte Architekturen bereit: Blaupausen für Softwarearchitekten

Grundregeln für den Entwurf einer Architektur

Separation of Concerns (SoC)

Aufteilen bezüglich der Zuständigkeitsbereiche wie z.B. im WebClient: HTML/CSS/JavaScript. Oder Aufteilung in Schichten wie Data Access Layer (DL), Business Layer, Service Layer... Q: Wikipedia

CQS

CQS ist ein Akronym für Command Query Separation. Es bezeichnet ein Prinzip des Softwareentwurfs, das von Bertrand Meyer, dem Erfinder der objektorientierten Programmiersprache Eiffel entwickelt wurde.

CQS unterteilt die Menge der möglichen Operationen auf Geschäftsobjekte in die beiden Klassen Abfragen und Kommandos.

Abfragen verändern den Zustand der Geschäftsobjekte nicht. Durch ihre Anwendung werden Daten über die Geschäftsobjekte gewonnen. Wenn Ta qA(...) und Tb qB(...) zwei Abfragen sind, die in der Reihenfolge var ra1 = qA(...); var rb1 = qB(...); var rb2 = qB(...); var ra2 = qA(...) ausgeführt werden, dann gilt stets: ra1 == ra2 && rb1 == rb2
Beispiele: TBo GetBo(T id); // Liefert Geschäftsobjekt mit der ID id zurück

Kommandos verändern den Zustand der Geschäftsobjekte. Ihre Ausführungsreihenfolge ist von Bedeutung. Wenn cmdA(...) und cmdB(...) Kommandos sind, dann kann der Zustand des Objektmodells nach unterschiedlichen Reihenfolgen der Kommandoausführung verschieden sein: cmdA(...); cmdB(...) // Zustand ist jetzt Z1
cmdB(...); cmdA(...) // Zustand ist jetzt Z2
Es ist nicht garantiert, das Z1 == Z2 gilt !

Da der Zustand des Objektmodells von der Ausführungsreihenfolge der Kommandos abhängt, wird auf die Rückgabe von Zuständen durch Kommandos verzichtet, da die unmittelbare Rückgabe eine die Bindung eines Objektzustandes suggeriert an die Ausführung des Kommandos sugerriert, die jedoch unrealistisch ist.
In C# haben Kommandos damit immer den Rückgabetyp void, in VB.NET werden Kommandos durch Sub implementiert.
Beispiele: void CreateAndAdd(TId id) // erezugt ein neues Objekt und fügt es einer Collection zu

Repository- Schnittstelle, die nach dem CQS- Prinzip erstellt wurde:

  // Neues Repository für Benutzer anlegen
  var repo = new UserRepository();
  
  // Kommando zum Anlegen und eines neuen Benutzers
  repo.CreateAndAdd("Anton");
  
  // Abfragen, ob Benutzer nun im Repository existiert
  if(repo.Any("Anton")){
     // Anton existiert und kann nun konfiguriert werden
     var userBld = repo.GetBuilder("Anton");
     // Konfigurationskommandos
     userBld.setRole("Admin");
     userBld.setBirthday("1999-12-31");
     repo.SubmitChanges();
  
     // Frisch erstelltes und fertig konfiguriertes Objekt für Anton abfragen
     var Anton = repo.GetBo("Anton");
  }

CQRS

CQRS ist ein aus dem CQS- Prinzip abgeleitetes, asymetrisches Schichtenmodell. Dieses sieht nur noch für die Implementierung der Kommandos die explizite Entwicklung eines Business Layers vor. Die Abfragen können hingegen dierekt ans den Data Access Layer deligiert werden. Hierdurch wird der Implementierungsaufwand minimiert und die Ausführungsgeschwindigkeit von Abfragen beschleiunigt.

Law of Demeter (Prinzip der Verschwiegenheit)

Ein Client (=Objekt) sollte nur die unmittelbaren Dienste (= offentliche Methoden) eines Servers aufrufen. Dienste, welche der Server in seiner Implementierung nutzt, sollten über seine angebotenen Dienste nicht offengelegt werden. Q: Wikipedia
→Implementierung mittels Wrapper

Don't repeat yourself (DRY)

Vermeiden sich wiederholende Codeabschnitte. In der prozeduralen Programmierung durch Methodenextraktion und Parametrisierung umsetzbar. Konvention vor Konfiguration ist ein auf DRY aufbauendes Paradigma, welches z.B. durch Namenskonventionen sonst notwendige Konfiguration von Softwarepaketen vermeidet, und in ASP.NET MVC eingesetzt wird.

Ist ein Akronym für die Anwendung der folgenden Pakets von Grundregeln beim Entwurf und der Implementierung:

. Q: Wikipedia