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

21

18.03.2016, 00:47

NetworkUnit: protected void Start() {[...]}
NetworkEnemy: override protected void Start() { base.Start();[...]}

Gerade hier kann man aber schon überlegen, die Besonderheiten des Enemy in eine separate Komponente auszulagern (Stichwort "Composition over Inheritance").


Ok super, dankeschön!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

22

18.03.2016, 07:57

Was denkt ihr dazu, wie würdet ihr es machen und ich habe es jetzt als Antwort geschrieben, da es ganz Gut zum Topic past
Ich würde einen Stream übergeben, was effektiv auch eine Art Strategy-Pattern ist. Wohin der dann genau schreibt, das ist dem Schreiber egal.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

23

18.03.2016, 09:09

Also:

So habe ich es designed: (siehe Bild!)

Was sagt ihr?
»JungleProgger« hat folgendes Bild angehängt:
  • Unbenannt.PNG

Tobiking

1x Rätselkönig

  • Private Nachricht senden

24

18.03.2016, 09:47

Das was du da gerade bastelst wird als Serialization bezeichnet und in vielen Sprachen gibt es bereits von Haus aus Mechaniken dafür bzw. gute Third-Party Implementierungen. Das solltest du dir mal anschauen bevor du da selber etwas bastelst.

Was die Bewertung deiner Architektur angeht, solltest du mal selber versuchen die zu bewerten, indem du einfach mal verschiedene Fälle beispielhaft durchspielst. Wie sieht der Code aus wenn ich ein Objekt speichern möchte? Wie sieht der Code aus wenn ich ein Objekt laden möchte? Wie sieht der Code aus wenn ich eine neue Strategy hinzufügen möchte? Wenn dir dann etwas umständlich oder unnötig vorkommt, kannst du überlegen ob es besser geht, oder gezielt fragen.

Beim Laden fällt mir z.B. auf, dass man erst ein Objekt mit Default- oder Dummywerten erzeugen muss, damit man Read aufrufen kann und die richtigen Daten geladen werden. Das wirkt unnötig, weswegen ich schauen würde ob es einen Weg gibt eine Funktion zu schreiben, die mir direkt das Objekt mit geladenen Werten erzeugt.

25

18.03.2016, 09:57

ok, danke für die Antwort erstmal.

Nur was meinst du mit:

Beim Laden fällt mir z.B. auf, dass man erst ein Objekt mit Default- oder Dummywerten erzeugen muss, damit man Read aufrufen kann und die richtigen Daten geladen werden. Das wirkt unnötig, weswegen ich schauen würde ob es einen Weg gibt eine Funktion zu schreiben, die mir direkt das Objekt mit geladenen Werten erzeugt.



Wenn ich "ReadFrom(input) : object" bei den jeweiligen Storages implementiere, wieso müssen da Dummywerte rein, das verstehe ich nicht^^

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

26

18.03.2016, 10:05

Du hast BlueCobold da falsch verstanden. Du brauchst nicht selbst die Strategie zu implementieren. Wenn du das ganze jetzt entwickelst, worin unterscheiden die sich? An sich nur in den Werten welche du als Parameter übergibst. Eben die Streams. Das heißt deine Strategien haben an sich den selben Code und sich gleich mächtig. Wofür brauchst du dann verschiedene Klassen? Der Stream selbst ist quasi deine Strategie.
Vor allem bei so kleinen Dingen ist es oft sinnvoll erst mal zu testen. Wenn du dir nicht sicher bist schreib die paar Zeilen für die 4 Klassen und guck ob es dir sinnvoll erscheint. Dann kannst du auch direkt testen wie du mit deinem Code arbeiten kannst. Und dabei fällt dir dann auch direkt auf wenn du zwei mal die selbe Klasse schreibst.
„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.“

27

18.03.2016, 10:13

Achso meint er das :D ok, bin ich einverstanden mit^^

Aber wie ich bereits mal zuvor geschrieben habe:

Ist es Designmäßig nicht doch eventuell etwas besser, wenn man es so implementiert, denn wenn der Fall kommen sollte, das die konkreten Strategys, doch mal auch unterschiedlich arbeiten, dann muss man ja nur die Funktion des jeweiligen Strategys ändern und alles funzt weiterhin oder irre ich mich?

28

18.03.2016, 10:18

Weil eigentlich wird doch ganz anders in eine Datenbank geschrieben als in eine File?

oder an einem Netzwerk wird doch auch "anders" gesendet, als in den beiden oberen,

Da habe ich die unterschiedlichsten Varianten gesehen, wie in einem Networkstream geschrieben wird.

Und bei der Datenbank wieder, ist es ja auch abhängig, ob man nicht irgendwelche anderen .dll's nutzt und dann sieht der Code auch doch wieder anders aus?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

29

18.03.2016, 10:34

wenn der Fall kommen sollte, das die konkreten Strategys, doch mal auch unterschiedlich arbeiten, dann muss man ja nur die Funktion des jeweiligen Strategys ändern und alles funzt weiterhin oder irre ich mich?
Wenn du verschlüsselt auf die Platte schreiben willst, erstellst Du eben eine neue Stream-Klasse, die wieder einen Stream nimmt und den verschlüsselt. Mit der Strategy kannst du effektiv also jeden anderen Stream (egal ob Platte, Netzwerk, Datenbank) ebenfalls verschlüsseln. Dem Schreiber kann daher total egal sein, was die Streams intern machen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (18.03.2016, 11:27)


30

18.03.2016, 10:41

Hmm.

Sry, vielleicht verstehe ich da was konkret nicht, aber ein Beispiel:

wenn ich zum Beispiel eine Datenbank dll nutze wie Parse.de ----> (ist ein Cloud und Databaseanbieter www.parse.com (keine werbung :D)) oder irgendeine andere ist ja auch Latte, dann brauche ich doch da keinen Stream mehr, weil der Stream schon intern in der Dll irgendwie gekapselt wird und die Dll mir nur sowas wie. Db.Init() geben wird damit ich mit ihr arbeiten kann, da also brauche ich ja gar keinen Stream und das könnte bei so einigen anderen Sachen so laufen oder etwa nicht?

Und deswegen, sträube ich mich im inneren etwas dieses Pattern nicht zu nutzen ^^

Werbeanzeige