Command-Query-Separation

Command-Query-Separation (CQS,[1] 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 (query) oder als Kommando (command, modifier oder mutator) 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.“

Bertrand Meyer: Object Oriented Software Construction[2]

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

Einzelnachweise

  1. Martin Fowler: CommandQuerySeparation. 5. Dezember 2005, abgerufen am 18. Mai 2014 (englisch).
  2. Bertrand Meyer: Object Oriented Software Construction. Prentice Hall, 1988, ISBN 978-0-13-629155-8, S. 751.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.