Laden...

Design Patterns = schlecht?

Erstellt von der-schlingel vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.212 Views
der-schlingel Themenstarter:in
799 Beiträge seit 2007
vor 14 Jahren
Design Patterns = schlecht?

Hallo,

ich habe heute einen interessanten Artikel zum Thema Programmiersprachen und dem Trend immer mehr und mehr aus Lisp in aktuelle Sprachen einzubauen. (Gute Bsp. sind Python, Ruby oder auch Lambda Expressions in C#)

Doch was mir dann doch zu Denken gab war der letzte Absatz. Dieser geht darauf ein, dass Patterns ein Anzeichen dafür sind, dass die Sprache nicht genug Ausdruckskraft mitbringt und der Programmierer so auf diese abstrakten Architekturen ausweichen muss. Hier der Absatz im Detail:

This practice is not only common, but institutionalized. For example, in the OO world you hear a good deal about "patterns". I wonder if these patterns are not sometimes evidence of case (c), the human compiler, at work. When I see patterns in my programs, I consider it a sign of trouble. The shape of a program should reflect only the problem it needs to solve. Any other regularity in the code is a sign, to me at least, that I'm using abstractions that aren't powerful enough-- often that I'm generating by hand the expansions of some macro that I need to write.

Was haltet ihr von der Aussage?

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl
6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

in gewisser Weise kann ich Kritik an den Patterns verstehen. Aber nicht wegen den aufgeführten Gründen, sondern weil User Patterns manchmal implementieren, nur um das Pattern zu haben, ohne das es vielleicht benötigt wird. Von daher wird Code schon öfter mal komplizierter als er sein müsste.

Andererseits muss man sich mal überlegen wo die Patterns herkommen. Es ist ja nicht so das sich mal irgendwer hingesetzt hat und meinte ich erfinde jetzt nen paar Pattern. Bestimmte Probleme wurden immer wieder auf ähnliche Art gelöst und dieser Lösungsweg ist dann ein bestimmtes Pattern - die haben sich mit der Zeit einfach rauskristallisiert. Zum Beispiel MVC - nen Namen hat das Kind erst vor relativ kurzer Zeit erhalten - so programmiert wurde schon seit Jahrzehnten.

Ob jetzt die Sprache Schuld ist das man überhaupt solche Lösungswege gehen muss, find ich schwer zu beantworten. Einerseits gibts in C# z.B. mit Events ein Mittel welches das Observer Pattern ersetzen kann. Andererseits kann ich mir keine Sprache vorstellen die für alle heutzutage gebräuchlichen Pattern Sprachmittel anbietet. Diese wäre weit davon entfernt einfach beherschbar zu sein.

Wenn man ein Standardproblem hat, welches durch ein bestimmtes Pattern sauber gelöst werden kann, soll man es auch einsetzen. Aber wie gesagt, niemals nen Pattern nur um des Pattern willen einsetzen.

Baka wa shinanakya naoranai.

Mein XING Profil.

1.002 Beiträge seit 2007
vor 14 Jahren

Hallo talla,

niemals nen Pattern nur um des Pattern willen einsetzen.

stimmt, die Pattern-Krankheit ist praktisch ein Anti-Pattern 😃.

Es ist ja nicht so, dass Patterns die einzige Möglichkeit darstellen, ein bestimmtes Problem zu lösen; sie bieten vielmehr einen eleganten, wiederverwendbaren oder "sauberen" Weg, eine Problemstellung zu bewältigen.
Wie talla bereits gesagt hat: Eine Programmiersprache, die den Einsatz aller Patterns unnötig macht, wäre sehr komplex und kaum verstehbar; mal abgesehen davon sehe ich keinen Grund, in "trouble" zu geraten, wenn ich in meinem Code (sinnvolle) Patterns verwende.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

U
1.578 Beiträge seit 2009
vor 14 Jahren

solche nennt man auch patterholics #gg

im prinzip ist das do einfach nur so:
es werden diverse sachen einfach so entwickelt - und wenn sie sich aehneln bekommen sie auch n namen (sofern ein das interessiert)

ich hab hier zum beispiel fuer exporter eine factory klasse - man koennte sagen das das insgesammt das factory pattern ist - ich habe es aber nur so implementiert da es so am besten zu benutzen ist - obs ein pattern ist oder nicht - ist voellig irrelevant

oder ich denk an meine anfaenge zurueck
ich hatte immer wieder so eine statische klasse verwendet usw - bis ich spaeter durch zufall erfuhr das ich die ganze zeit ein singleton verwendete bzw auch selber implementierte

=> sind doch nur namen

390 Beiträge seit 2008
vor 14 Jahren

Hallo Zusammen

Ich denke nicht, dass Patterns grundsätzlich schlecht sind. Sie sollen ja gerade eine saubere Lösung für gängige Probleme bieten. Oft merkt man auch beim Nachschlagen eines Patterns, dass man es schon in ähnlicher Weise eingesetzt hat, ohne es zu wissen.

Gewisse Sachen wie der Observer können natürlich durch Sprachmittel ersetzt werden. Auch das Visitor Pattern wäre scheinbar durch eine Unterstützung von Multiple Dispatch einfacher zu implementieren. Sachen wie Singletons könnte man in der Sprache verankern, wenn man sich aber den "Missbrauch" dieses Patterns ansieht, sollte man es vielleicht doch besser lassen. 😉

Appropos Singleton: Da fällt mir ein gueter Abschnitt aus dem OO Openbook ein 😉

Auf einer Konferenz mit Schwerpunkt Java-Programmierung habe ich einmal zwei Vorträge hintereinander gehört, der erste davon von Erich Gamma, der zu Entwurfsmustern vortrug. Befragt, ob er nicht einiger der Muster schon überdrüssig sei, meinte er, das Singleton-Pattern sei dasjenige, das er für am problematischsten hielte. In vielen Anwendungen sei es mittlerweile so, dass man eben Singletons einsetze und dann darauf verweise, dass man ja Entwurfsmuster im Einsatz habe, also die neuesten Modellierungstechniken verwende. Gleich im Anschluss sprach dann ein Firmenvertreter über eine Anwendung und hatte dabei zehn Folien für die Erläuterung des dort zentralen Singleton-Entwurfsmusters reserviert. Er war offensichtlich recht konsterniert, da er den Vortrag von Erich Gamma auch gehört hatte, und ging diesen Teil seines eigenen Vortrags ziemlich hastig durch.

using Skill

6.862 Beiträge seit 2003
vor 14 Jahren

...Singleton...

Hehe, kann ich mir vorstellen. Man kann auch einfach hier im Forum sich mal umschaun. Auch hier ist Singleton wohl das am meisten missbrauchte Entwurfsmuster überhaupt.

... Oft merkt man auch beim Nachschlagen eines Patterns, dass man es schon in ähnlicher Weise eingesetzt hat, ohne es zu wissen.

Genau das mein ich ja auch. Pattern sind ja aus Alltagsproblemen entstanden. Sie wurden ja nicht ohne Praxisbezug irgendwie mal konstruiert. Von daher haben sie schon prinzipiell eine Daseinsberechtigung und sind für mich kein Zeichen das die Sprache nicht ausdrucksvoll genug ist.

Baka wa shinanakya naoranai.

Mein XING Profil.

2.891 Beiträge seit 2004
vor 14 Jahren

Hallo talla,

Zum Beispiel MVC - nen Namen hat das Kind erst vor relativ kurzer Zeit erhalten - so programmiert wurde schon seit Jahrzehnten.

Wie meinst du das? Das MVC-Konzept existiert seit 1978, den Namen hat es seit '79. Wirklich als Entwurfsmuster/Pattern wurde es allerdings erst 1995 beschrieben.
(Wo ist also die "relativ kurze Zeit"?)

Gruß,
dN!3L

S
469 Beiträge seit 2007
vor 14 Jahren

Ich habe mich erst seit kurzem intensiv mit Design Patterns beschäftigt, aber ich muss sagen, dass ein Teil davon eigentlich wirklich nur Vorgehensweisen einen Namen gibt, die man eigentlich intuitiv sowieso so verwendet hätte (ich konnte bei vielen Projekten und Projektteilen, die ich ohne Wissen über Design Patterns programmiert hatte, die verwendeten Patterns nachträglich benennen).
Andere Design-Patterns überschneiden sich teilweise, da könnte man das eine oder andere verwenden. Es ist jedenfalls nicht so, dass die Verwendung von Design Patterns einem alle Probleme von alleine löst oder sie den Code verbessern oder übersichtlicher machen (bei letzterem können Design Patterns auch sehr gut das Gegenteil hervorrufen...das allerdings jetzt ohne Wertung!).
Trotzdem stehe ich Design Patterns eher positiv gegenüber.
Jemandem, der sich mit Design von größeren oder komplexeren Projekten noch nicht so gut auskennt, dem sind Design Patterns vielleicht ein Hilfestellung, wie man eine Anwendung in ihre Verantwortungsbereiche aufteilen kann. Da es viele Beispiele im Netz gibt, bekommt man im Zweifelsfall auch Bestätigung (oder auch nicht) für das eigene Konzept.
Und es klingt irgendwie auch "professionell" und man schindet bei Laien und nicht so erfahrenen Entwicklern Eindruck, wenn man sagen kann, man hat dieses und jenes Design Pattern im Einsatz :evil: 😉 ... ich denke deshalb verwenden es auch viele Plapperer in ihren Vorträgen 😁

gruß
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

X
1.177 Beiträge seit 2006
vor 14 Jahren

huhu,

nachdem ich eben ein bischen Doku für externe Programmierer geschrieben habe, war ich schon froh Patterns angeben zu können. Man kann eben mit "einem Wort" beschreiben, was man an der Stelle haben will und wie es umgesetzt sein soll.

Design-Patterns sind andersherum ja keine strikte Vorschrift, sondern eine Beschreibung von oft benutzten Möglichkeiten.

😃

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

Gelöschter Account
vor 14 Jahren

aber ich muss sagen, dass ein Teil davon eigentlich wirklich nur Vorgehensweisen einen Namen gibt, die man eigentlich intuitiv sowieso so verwendet hätte (ich konnte bei vielen Projekten und Projektteilen, die ich ohne Wissen über Design Patterns programmiert hatte, die verwendeten Patterns nachträglich benennen).

das wissen über diese patterns hätte aber die zeit deutlich verkürzt, die du gebraucht hättest, um das problem auch ohne das wissen zu lösen.

ich habe schon öfter erlebt das entwickler vor einem problem sitzten und nachdenken.... dann implementieren und dann kommt ein anderer entwicker und sagt... ah ja das "..." designpattern....

mit kenntniss wäre das deutlich schneller gegangen. deshalb hängt in meiner nähe ein schönes poster mit den gängigsten patterns inkl. einem lustigen bild zu jedem pattern.

Und es klingt irgendwie auch "professionell" und man schindet bei Laien und nicht so erfahrenen Entwicklern Eindruck, wenn man sagen kann, man hat dieses und jenes Design Pattern im Einsatz ... ich denke deshalb verwenden es auch viele Plapperer in ihren Vorträgen

ja, das habe ich auch schon oft beobachtet.

T
381 Beiträge seit 2009
vor 14 Jahren

deshalb hängt in meiner nähe ein schönes poster mit den gängigsten patterns inkl. einem lustigen bild zu jedem pattern.

Gibt es das digital? 😃
Würde mich interessieren.

390 Beiträge seit 2008
vor 14 Jahren

huhu,
Man kann eben mit "einem Wort" beschreiben, was man an der Stelle haben will und wie es umgesetzt sein soll.

Es fördert natürlich auch die Verständigung zwischen Entwicklern und beschreibt relativ klar eine Vorgehensweise. Ich höre auch lieber (obwohl ich das dann doch meistens nicht gerne höre 😉) "Ich habe das Singleton Pattern eingesetzt" als "Ich habe etwas gemacht womit man garantieren kann, dass von der Klasse nur ein Objekt erstellt wird". Es gibt automatisch weniger Missverständnisse, wenn man sich in Patterns ausdrückt. Das Argument "bei Anfängern Eindruck schinden" stimmt natürlich auch ein Stück weit.

Aber wie gesagt: Auch Patterns bieten nicht ein Wundermittel, womit sich alle Probleme in 10 Zeilen lösen lassen.

using Skill

Gelöschter Account
vor 14 Jahren

Gibt es das digital? 😃
Würde mich interessieren.

nein sry, das habe ich auf einer messe abgestaubt. ich weiß allerdings nciht mehr genau wo.

U
237 Beiträge seit 2007
vor 14 Jahren

Lustige Bilder auf einem Poster zu Patterns?

Könnte eigentlich nur folgendes sein:

Amazon

Hab das Buch dazu.

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int

Gelöschter Account
vor 14 Jahren

jau... genau das habe ich 😃