Zum Inhalt springen

Command-Query-Separation

aus Wikipedia, der freien Enzyklopädie

{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (CQS,<ref>Martin Fowler: CommandQuerySeparation. 5. Dezember 2005, abgerufen am 18. Mai 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> englisch für etwa Kommando-Abfrage-Trennung) ist ein Prinzip des Softwareentwurfs. Das CQS-Prinzip wurde von Bertrand Meyer im Zuge seiner Arbeit an der Programmiersprache Eiffel erdacht.

Das CQS-Prinzip besagt, dass eine Methode entweder als Abfrage ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) oder als Kommando ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value), {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) oder {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) implementiert werden soll. Eine Abfrage muss hierbei Daten zurückliefern und darf keine Seiteneffekte auf dem beobachtbaren Zustand des Systems aufweisen, während ein Kommando beobachtbare Seiteneffekte aufweist und keine Daten zurückliefert.

“Functions should not produce abstract side effects … only commands (procedures) will be permitted to produce side effects.”

„Funktionen sollten keine Seiteneffekte haben … nur Kommandos (Prozeduren) dürfen Seiteneffekte haben.“

– Die Seite Vorlage:Person/styles.css hat keinen Inhalt.Bertrand Meyer: Object Oriented Software Construction<ref>Bertrand Meyer: Object Oriented Software Construction. Prentice Hall, 1988, ISBN 978-0-13-629155-8, S. 751.</ref>

Das Prinzip verbietet nur abstrakte Seiteneffekte für Abfragen. Bertrand Meyer unterscheidet davon zwei Arten harmloser Seiteneffekte, die oft sogar für Abfragen notwendig sind:

  • Seiteneffekte, die am Ende der Abfrage wieder zurückgenommen werden.
  • Seiteneffekte, die nur den privaten Zustand des Objektes betreffen, also von außen nicht wahrnehmbar sind.

Siehe auch[Bearbeiten]

Einzelnachweise[Bearbeiten]

<references />

Die Seite Vorlage:Erweiterte Navigationsleiste/styles legacy.css hat keinen Inhalt.Vorlage:Klappleiste/Anfang

SOLID-Prinzipien

Single Responsibility • Open Closed • Liskovsches Substitutionsprinzip • Interface Segregation • Dependency Inversion

Weitere Prinzipien

Gesetz von Demeter • Design by Contract • Datenkapselung • Linguistic Modular Units • Self-Documentation • Uniform Access • Single Choice • Persistence Closure • Command-Query-Separation

Packaging-Prinzipien

Reuse Release Equivalence • Common Closure • Common Reuse • Acyclic Dependencies • Stable Dependencies • Stable Abstractions

Vorlage:Klappleiste/Ende