Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

1

09.08.2016, 09:13

Der Design Pattern Thread

Hey,

Habe den Thread hier eröffnet weil man immer viel im Studium von Design Pattern hört und wie diese theoretisch aussehen, allerdings finde ich es immer schwer die Theorie dann auf die Praxis zu übertragen.
Wollte hier im Thread einfach mal wissen was ihr so für "Standard Pattern" benutzt und für was ihr sie benutzt. Denke da hat jeder so seine Vorlieben.

Das einzige Pattern das ich momentan wirklich verwende, vermutlich aus dem Grund dass ich es ganz gut verstanden habe ist das Composite Design Pattern. Ist halt ziemlich praktisch bei allen möglichen Baumstrukturen. Habe mir früher für solche Strukturen selbst was hingepfuscht, allerdings war das Design dann auch sehr sehr schlecht.

Gruß
Moritz :=)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

09.08.2016, 09:29

Builder und Visitor sind bei mir regelmäßig zu finden.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

09.08.2016, 09:39

Factory habe ich schon oft benutzt, insbesondere wenn man zur Laufzeit eine DLL lädt und diese neue Arten von Objekten bereitstellt (Plug-in).

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

09.08.2016, 10:02

Du hast scheinbar (wie viele andere auch immer wieder) das Problem von der falschen Seite aus angegangen.
Es hört sich für mich zumindest so an wie "ich hab tolle Patterns, weiß aber nicht, wo ich sie einsetzen soll". Du suchst also nach einem Problem für deine Lösung ;)

Erst wenn du ein Problem lösen willst kannst du gucken, ob das nicht schon mal getan wurde (denn groß etwas anderes sind Patterns ja nicht. Öfter auftauchende Probleme können halt mit dem gleichen Muster behoben werden)

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

5

09.08.2016, 10:06

Factory ist ja eigentlich ein Klassiker, den man immer wieder benötigt. Was ich noch einigermaßen häufig verwende, ist Decorator. Eine prima Möglichkeit, bestehenden Objekten kleine Funktionalitäten oder Eigenschaften hinzuzufügen (z.B. Logging). Das Observer-Pattern benötige ich ebenfalls häufiger in der Webentwicklung, wenn man verschiedene Teile der Seite, die das gleiche Objekt mit unterschiedlichen Viewmodels abbilden, synchron halten will. Dependency Injection steht bei mir ebenfalls hoch im Kurs, vor allem wenn die Anwendung an sich bereits sehr abstrakt gehalten ist.

In der Praxis habe ich allerdings schon häufiger erlebt, dass ein paar "ganz Schlaue" die Verwendung von Designpattern und einen hohen Abstraktionsgrad deutlich übertrieben haben. Es bringt halt auch nicht viel, wenn ich super lesbaren und den SOLID-Prinzipien entprechenden Quellcode habe, dafür das Synchronisieren von 40.000 Artikeln aber 8 Tage dauert statt 8 Minuten, nur weil da mit Generika, Reflection und Factories nur so um sich geworfen wurde. Hier wird meiner Meinung nach zu oft das Kundenbedürfnis und die Benutzbarkeit der Applikation vernachlässigt. Natürlich kann man das nicht pauschalisieren, aber ich habe leider schon in zu vielen Projekten gesehen, dass zu theoretische Entwicklung zulasten von Performance geht. SOA ist da ebenfalls ein Kandidat, wenn man die einzelnen Bestandteile zu granular macht. Im Beispiel mit den Artikeln von oben hat man sich dafür entschieden, das Synchronisieren, Mergen, und Validieren von Artikeln, sowie das Generieren von Artikelnummern alles als einzelne Webservices zu designen, immer alles artig abstrakt und mit Reflection, und schon dauert so ein Sync mit 40.000 Artikeln 8 Tage. Insofern bin ich immer sehr vorsichtig, wenn irgendwelche frisch Studierten ohne Praxiserfahrung (PS: Ich darf sowas sagen, ich habe selber studiert :thumbsup: ) mit Designpattern um sich werfen, das ist nämlich auch nicht immer der heilige Gral.

Also nicht dass wir uns hier missverstehen: Ich will nicht pauschal gegen Designpattern und Abstraktion stänkern, ich verwende das selbst ebenfalls, ich will nur sagen, dass diese Muster OFT nur den Punkt Code-Ästhetik und Wartbarkeit/Lesbarkeit bedienen, aber nicht immer die Lösung eines fachlichen oder technischen Problems

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LInsoDeTeh« (09.08.2016, 10:18)


fraggr

unregistriert

6

09.08.2016, 10:11

Das Dependency Injection Pattern zur Inversion of Control im Dependency Inversion Principle! Früher hätte man das einfach ein Callback genannt, aber noch sind die Zusammenhänge nicht vollends erforscht.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

09.08.2016, 12:05

Benutz mal die Forensuche, zu dem Thema gibt es schon einige Threads. Vielleicht findest du da noch interessante Infos für dich. Ansonsten nutze ich teilweise die hier genannten und zusätzlich schon mal Strategy und State. Ansonsten gibt es viele interessante Pattern. Proxy, Command und Interpreter sind Patterns die man nicht unbedingt oft benötigt, die aber gut helfen können. Observer ist etwas was man teilweise schon mal benutzt (manchmal vielleicht ohne es zu wissen).
Wenn dich das Thema interessiert, ich hab mir im Studium "Entwurfsmuster von Kopf bis Fuß" gekauft und da öfter im Zug drin gelesen. Hab dann natürlich ein paar Patterns nach programmiert und teilweise in meinen Projekten verwendet. Am Anfang neigt man dazu mit Patterns um sich zu schmeißen und mit der Zeit lernst du dann wann so ein Pattern sinnvoll sein kann und wann nicht. Ich denke das bringt einen schon irgendwo weiter da du eben etwas dabei lernst.

Du hast scheinbar (wie viele andere auch immer wieder) das Problem von der falschen Seite aus angegangen.
Es hört sich für mich zumindest so an wie "ich hab tolle Patterns, weiß aber nicht, wo ich sie einsetzen soll". Du suchst also nach einem Problem für deine Lösung

Im Prinzip war das bei mir genau so. Schlimm ist das wie ich finde aber erst mal nicht. Solange man nicht bei der Arbeit bei wichtigen Projekten mit so einem Quatsch anfängt und sich zu Hause privat austobt darf man ja auch gern auf die Nase fallen. Und wie gesagt man lernt was dabei. Hinterher siehst du dann selbst ein dass Patterns kein Allheilmittel sind, hast aber hoffentlich verstanden wie du mit Patterns an Probleme ran gehen kannst. Bei mir ist es zum Beispiel so dass ich halt einige Patterns kenne und eben auch schon mal testweise verwendet habe und wenn dann ein Fall kommt wo mir so ein Pattern eben helfen könnte dann fällt mir (hoffentlich) ein dass ich da ja schon etwas fertiges kenne was ich zumindest als Vorbild nehmen kann.

Mein Vorschlag wäre also erst mal ein paar Patterns anzusehen und ruhig mal damit rum zu spielen um selbst Vor- und Nachteile zu sehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

8

09.08.2016, 12:32

Kann auch diese Buch empfehlen, welches es komplett im Netz gibt.
http://gameprogrammingpatterns.com/contents.html
Du kannst es dir aber zum Beispiel auch auf deutsch bei Amazon kaufen :)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

9

09.08.2016, 18:41

Im Grunde ermöglichen Designpatterns nur über häufig vorkommende Strukturen zu sprechen(Deswegen haben manche Patterns auch mehr als einen Namen). Man gab ihnen einen Namen um besser kommunizieren zu können und Neulingen zu zeigen, wie man bestimmte Probleme geschickt löst.

Also... Schau sie dir an, überlege dir einmal was man damit umsetzen könnte und denke nicht weiter drüber nach. Sobald du ein Problem hast, das sich mit einem entsprechenden Pattern lösen lässt wirst du wahrscheinlich sowieso selbst drauf kommen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

10

15.08.2016, 16:17

Jedes Design Pattern wurde als Lösung für ein bestimmtes Problem entworfen, z.B. das Singleton Design Pattern, wenn man nur eine Instanz der Klasse haben will und es keine weitere Instanz der Klasse geben darf.

In Java wäre folgendes ein Singleton Design Pattern:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class MyClassName {

  protected static MyClassName instance = null;

  /*
  * default constructor
  */
  protected MyClassName () {
    //...
  }

  public void doSth () {
    //...
  }

  /*
  * get instance of class
  */
  public static MyClassName getInstance () {
    if (MyClassName.instance == null) {
      //create new instance of class
      MyClassName.instance = new MyClassName();
    }

    return MyClassName.instance;
  }

}


Hier noch ein Beispiel, wie man die Instanz nutzt:

Quellcode

1
2
3
4
5
6
7
class OtherClassName {
  public void doSomething () {
    MyClassName.getInstance().doSth();
  }
}

Sozusagen ruft man außer in getInstance() nie den Konstruktor der Klasse auf und da dieser protected oder vllt. sogar private ist, hat man eine Garantie, dass er auch sonst nirgends aufgerufen wird.
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Werbeanzeige