Klassen untereinender sichtbar und zugreifbar

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.

    Klassen untereinender sichtbar und zugreifbar

    Nabend zusammen

    Musste mich heute nochmal mit Klassen beschäftigen. Insbesondere, das Klassen untereinander kommunizieren und Methoden aufrufen können.

    Ich habe in einem Projekt folgendes. Hier mal nur einfach abgebildet.

    Von der GUI wird per klick eine Methode in Class WriteFiles mit einem bestimmte Parameter aufgerufen.

    Nach Abarbeitung der Methode ruft nun die Class WriteFiles eine Methode in der Class DeleteFiles auf.

    Nach Abarbeitung ruft die Class DeleteFiles nun wieder die selbe / gleiche Methode in der Class WriteFiles mit einem weiteren Parameter auf, die dann, nach erneuter Abarbeitung, letztendlich ein Event feuert, was auf der GUI angezeigt wird.

    Die DebugAusgaben:
    Das ist ein Test in der Klasse WriteFiles.
    Das ist der Text mit dem 2ten Parameter.
    OK auf dem form
    '----------------
    Soweit klappt das ja alles. :)
    Was mir nur so Kopfzerbrechen macht, und mir (mal wieder mein Asperger) so unnütz viel vorkommt, ist diese Menge an Code damit die Klassen untereinander sich austauschen können. ?(

    Das geht doch bestimmt einfacher :?:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frmMain
    2. Private WithEvents driveManager As New DriveManager()
    3. Private WithEvents fileWriter As WriteFiles
    4. Private WithEvents fileDeleter As DeleteFiles
    5. Private Sub InitializeClasses()
    6. ' Hier die Referenzen in den jeweiligen Klassen
    7. fileWriter.SetDeleteFiles(fileDeleter)
    8. fileDeleter.SetWriteFiles(fileWriter)
    9. End Sub
    10. Public Sub New()
    11. ' Hier werden die Objekte erstellt
    12. fileWriter = New WriteFiles(driveManager, Nothing)
    13. fileDeleter = New DeleteFiles(driveManager, Nothing)
    14. ' Setze die Referenzen in den jeweiligen Klassen
    15. InitializeClasses()
    16. ' Initialisierung des Formulars
    17. InitializeComponent()
    18. End Sub
    19. Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
    20. fileWriter.ShowMessageInWriteFiles(1)
    21. End Sub
    22. Private Sub ReciveEvnet(sender As Object, isSuccsess As Boolean) Handles fileWriter.Notifire
    23. If isSuccsess Then Debug.WriteLine("OK auf dem form")
    24. End Sub
    25. End Class


    VB.NET-Quellcode

    1. Public Class DeleteFiles
    2. ' Referenz auf den DriveManager & WriteFiles
    3. Private driveManager As DriveManager
    4. Private WithEvents fileWriter As WriteFiles
    5. ' Konstruktor, um den DriveManager zu übergeben und zuzuweisen
    6. Public Sub New(driveManager As DriveManager, driveFormater As WriteFiles)
    7. Me.driveManager = driveManager
    8. Me.fileWriter = fileWriter
    9. End Sub
    10. ' Methode zum Setzen des WriteFiles-Objekts
    11. Public Sub SetWriteFiles(fileWriterInstance As WriteFiles)
    12. Me.fileWriter = fileWriterInstance
    13. End Sub
    14. ' Methode öffentlich für die WriteFilesClass
    15. Public Sub ShowMessageInDeleteFiles()
    16. Dim className As String = Me.GetType().Name
    17. Dim message As String = $"Das ist ein Test in der Klasse {className}."
    18. Debug.WriteLine(message)
    19. End Sub
    20. ' Hier wieder zurück zur WriteFilesClass
    21. Public Async Sub ReadInWriteFiles()
    22. Await Task.Delay(2000)
    23. fileWriter.ShowMessageInWriteFiles(2)
    24. End Sub
    25. End Class


    VB.NET-Quellcode

    1. Public Class WriteFiles
    2. Public Event Notifire As EventHandler(Of Boolean)
    3. ' Referenz auf den DriveManager & DeleteFiles
    4. Private driveManager As DriveManager
    5. Private WithEvents fileDeleter As DeleteFiles
    6. ' Konstruktor, um den DriveManager zu übergeben und zuzuweisen
    7. Public Sub New(driveManager As DriveManager, driveFormater As DeleteFiles)
    8. Me.driveManager = driveManager
    9. Me.fileDeleter = fileDeleter
    10. End Sub
    11. ' Methode zum Setzen des DeleteFiles-Objekts
    12. Public Sub SetDeleteFiles(fileDeleterInstance As DeleteFiles)
    13. Me.fileDeleter = fileDeleterInstance
    14. End Sub
    15. ' Methode öffentlich für die DeleteFilesClass
    16. Public Async Sub ShowMessageInWriteFiles(para As Integer)
    17. Dim className As String = Me.GetType().Name
    18. Dim message1 As String = $"Das ist ein Test in der Klasse {className}."
    19. Dim message2 As String = $"Das ist der Text mit dem 2ten Parameter."
    20. If para = 1 Then
    21. Debug.WriteLine(message1)
    22. Await Task.Delay(1000)
    23. ' Hier zur Class DeleteFiles
    24. fileDeleter.ReadInWriteFiles()
    25. ElseIf para = 2 Then
    26. Debug.WriteLine(message2)
    27. RaiseEvent Notifire(Me, True)
    28. Else
    29. Debug.WriteLine("Ungültiger Parameterwert. Bitte 1 oder 2 verwenden.")
    30. End If
    31. End Sub
    32. ' Hier aus der DeleterClass lesen
    33. Private Sub ReadInDeleteFiles()
    34. fileDeleter.ShowMessageInDeleteFiles()
    35. End Sub
    36. End Class

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Auslagerung von Code in verschiedene Klassen ist zwar grundsätzlich eine super Idee, aber hier hast du Ziel weit verfehlt; bist quasi genau drübergeflogen.

    Wenn sich Klassen gegenseitig referenzieren ist das auch immer eher suboptimal. Zirkelreferenzen machen den Code unübersichtlich und unlesbar (wie du ja gerade selber merkst).

    Anstatt zwei Klassen, baue das Ganze doch mal in eine Klasse ​FileHandling um. Darin kümmerst du dich um alles, was File(handling) angeht; löschen, schreiben, kreieren, etc.
    Dann hast du alles in einer Instanz und kannst lesen, schreiben, löschen - im Zweifel dann sogar direkt nacheinander ;)
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Allein die Klassennamen sagen, dass was falsch läuft. WriteFiles, DeleteFiles. Das sind Bezeichnungen von Aufgaben, also Methodennamen. Keine Klassenbezeichungen. Als Klassenbezeichungen verwendet man normalerweise Substantive. Form (= Formular), Button (Knopf/Taste(r)), List (Liste), MyFancyWebBrowser.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das mit dem "löschen" und "schreiben" von Files war nur ein Beispiel!

    @siycah

    Also ich hatte das ursprünglich in einer Klasse geplant und die ersten test liefen auch. Nur das diese Klasse dann relativ groß war, schon dadurch das ich vieles in kleine Methoden packte. Ich las mal, das man Methoden um die 20-25 Zeilen machen solle, sonst wären die zu groß. Was ich schon oft als zu "unnütz" empfinde. Quasi für jeden "pups" eine Methode... :D

    Dann las ich wieder das man Klassen etc klein halten soll und ggf verschieden Aufgaben in verschiedene Klassen aufteilen solle. Irgendwie verständlich.
    Eine Klasse hat eine Aufgabe.

    Also ging ich hin und werkelte mit der Aufteilung der Klasse im zwei Klassen, bis es klappte.
    Dann kam mir das alles wieder viel zu kompliziert vor, und wenn ich nun noch weitere Klassen benötig.... :S

    Dann kam mir die Idee mit den Events. Ein Event von Class "a" feuert und Class "b" empfängt ... Tja war auch nichts, weils ja nicht so einfach geht.
    Was mich dann wieder (Asperger) an diesem System zweifeln lässt. Da schießen dann meine Neuronen quer. <X

    @VaporiZed
    Ich weiß um die Namen, waren hier nur als Beispiel gedacht.. nicht richtig überlegt. ;) Sorry ich gelobe Besserung. :thumbup:


    ------
    Also wäre es nun an der Zeit das ganze zu überdenken und eine komplett andere Richtung einschlagen, mein Programm zu entwickeln :?: :?:
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @siycah @VaporiZed

    Moin moin

    Hatte heute Nacht noch eine Idee, bzgl der Klassenaufteilung, wenn das so stimmt, dass Klassen etc. "klein" gehalten werden sollen.

    Ich bleibe bei meinen 2 Klassen, ohne das ganze Wirrwar mit dem untereinander zu kommunizieren.

    In der frmMain:
    Private Class driveManager as New DriveManger()
    Private WithEvent Class xyzOne As New One()
    Private WithEvent Class xyzTwo As New Two()

    Auf dem Form feuert eine Methode, mit Parameter (1) eine Methode in Class xyzOne an. Diese erledigt ihre Arbeit und feuert ein Event zurück ans Form.
    Das feuert dann wiederum eine Methode in der Class xyzTwo an, welches seine Arbeit erledigt und feuert dann ebenfalls per Event zurück ans Form.
    Und dann wieder zurück mit mit Parameter (2) an die Class xyzOne.

    Wäre das eine Möglichkeit im Sinne von CleanCode, OOP, Klassen und Methoden klein halten, usw??
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Prinzipiell geht das. Aber als Merkregel für Dich: Wenn Klassen immer in Paaren oder Gruppen aufgerufen werden müssen und nie wirklich unabhängig voneinander zugewiesene Aufgaben erledigen können, sollten sie wohl zu einer Klassen zusammengefasst werden. Wenn also immer Methoden von xyzOne aufgerufen werden und dann immer erst Methoden von xyzTwo, dann gehören wohl die Methoden von xyzOne und xyzTwo in eine gemeinsame Klasse.
    Beispiel: ein 3D-Objekt soll gezeichnet werden.
    • Du hast eine Klasse, die das Zeichnen vorbereitet
    • eine, die die Daten für das Zeichnen zusammensammelt
    • eine, die das Objekt mit den gesammelten Daten das Zeichnen durchführt
    • eine, die das ganze wieder aufräumt
    Wenn diese Klassen immer zusammen verwendet werden, weil es keinen Sinn ergäbe, sie unabhängig voneinander zu nutzen, gehört der Code nicht in vier Klassen sondern in eine.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Auf dem Form feuert eine Methode, mit Parameter (1) eine Methode in Class xyzOne an. Diese erledigt ihre Arbeit und feuert ein Event zurück ans Form.Das feuert dann wiederum eine Methode in der Class xyzTwo an, welches seine Arbeit erledigt und feuert dann ebenfalls per Event zurück ans Form.Und dann wieder zurück mit mit Parameter (2) an die Class xyzOne.Wäre das eine Möglichkeit im Sinne von CleanCode, OOP, Klassen und Methoden klein halten, usw??


    Nein.

    Im einfachsten Fall werden die beiden Methoden direkt hintereinander aufgerufen.
    So versteht das dann auch jeder:

    VB.NET-Quellcode

    1. Sub abc
    2. Methode1
    3. Methode2
    4. End Sub


    Man kann die Dinge nun mutwillig beliebig verkomplizieren. Da setzt die Kreativität wohl keine Grenzen.

    Mit deinem Vorschlag wäre die Ausführung nur noch durch Mithilfe des Forms sichergestellt, was aber überhaupt nicht notwendig ist.
    Am Ende kommt bei solchen Aktionen immer nur rum, dass nur der Autor den Code versteht und nach Ablauf von einigen Monaten auch dieser nicht mehr durchsteigt.
    Ich berichte natürlich aus eigener leidvoller Erfahrung ;(
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    @VaporiZed
    Im Prinzip verstehe ich was du meinst und klingt auch erstmal irgendwie Sinnvoll.

    Ich merke immer wieder, das ich Probleme habe, zu erkennen wann welche Methoden in eine oder mehrere Klassen gehören.
    Vermutlich denke ich oft zu "kompliziert" oder auch zu "simpel", was mir das Verständnis so erschwert. Ja und oft kommt mir dann das ganze OOP usw. so widersprüchlich vor.
    Kleine, kurze Klassen und Methoden, und dann doch wieder vieles in eine Klasse / Methode packen, was diese dann wieder "aufbläht".
    Hier muss ich wohl noch viel Code schreiben um da einen "Mittelweg" zu finden, Erfahrungen sammeln....

    @Rainman
    ​Im einfachsten Fall werden die beiden Methoden direkt hintereinander aufgerufen.

    So war meine Ursprüngliche Vorgehensweise. Der Code funktionierte auch super, machte das was er sollte. Dann schossen meine Neuronen (Asperger) quer...
    OMG diese Klasse ist viel zu groß!

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Wäre das eine Möglichkeit im Sinne von CleanCode, OOP, Klassen und Methoden klein halten, usw??

    Der Teufel steckt nunmal im Detail. In diesem Fall schießt du weit über das Ziel hinaus. Das ist zwar dann maximal OOP, aber hat wenig mit Clean Coding zu tun.

    Clean Coding besagt nicht nur, dass der Code vernünftig lesbar sein soll, sondern auch einfach zu verstehen. Wenn ich eine Klasse sehe, die effektiv nur eine Methode hat und direkt abhängig von einer anderen Klasse(nmethode) ist, dann verwirrt mich das nur. Da bleibt mir nur die Frage "was hat sich der Entwickler dabei nur gedacht?"

    VaporiZed schrieb:

    Prinzipiell geht das. Aber als Merkregel für Dich: Wenn Klassen immer in Paaren oder Gruppen aufgerufen werden müssen und nie wirklich unabhängig voneinander zugewiesene Aufgaben erledigen können, sollten sie wohl zu einer Klassen zusammengefasst werden.

    Genau das. Hätte ich besser nicht sagen können!

    VaporiZed schrieb:

    Wenn diese Klassen immer zusammen verwendet werden, weil es keinen Sinn ergäbe, sie unabhängig voneinander zu nutzen, gehört der Code nicht in vier Klassen sondern in eine.


    Ebenfalls goldrichtig. Dadurch sollte eine Klasse auch nicht riesig werden. Was du dazu noch machen kannst, was ich immer ganz charmant finde, ist partial class zu verwenden.
    Sprich: du hast eine Klasse, kannst aber die verschiedenen Aufgaben logisch unterteilen, in verschiedene Dateien.
    So macht es der Formdesigner schließlich auch. Alles was UI angeht und das Layout der einzelnen Elemente ist in FormX.Designer.xx und dein Codebehind ist in FormX.xx.

    Genau so könntest du:
    MyFoo.XXY.cs:

    C#-Quellcode

    1. public partial class MyFoo {
    2. // handles all things XXY
    3. }


    MyFoo.ZZR.cs:

    C#-Quellcode

    1. partial class MyFoo {
    2. // handles all things ZZR
    3. }


    machen. Dann hast du die Aufteilung die du wünscht, hast aber alles in einer einheitlichen Klasse, damit dein Code nicht plötzlich nach Carbonara riecht.


    Amelie schrieb:

    Ja und oft kommt mir dann das ganze OOP usw. so widersprüchlich vor.
    Kleine, kurze Klassen und Methoden, und dann doch wieder vieles in eine Klasse / Methode packen, was diese dann wieder "aufbläht".


    Wiedersprüchlich ist da nichts.
    Ist anfangs schwer zu verstehen, das stimmt schon. Da mach dir keinen Kopf, das wirst du auch noch alles schaffen.

    Aber auch wenn eine Klasse eine (große) Aufgabe übernimmt (z.B. FileHandling), machen die Methoden darin die kleinen Aufgaben. Die sollten nur so atomar wie möglich und sinnvoll geschrieben werden.

    Es gibt aber auch Außnahmen. Ich schreibe z.B. viel für Linux in C++. Da gibt es manchmal Konstrukte, die lassen es schlicht nicht anders zu, als dass du Funktionen (C++ Methoden) hast, die unfassbar groß werden, weil man jeden Schrott doppelt und dreifach prüfen und durchiterieren muss, weil es die Runtime nicht anders vorsieht. <X
    (Zumindest wenn man nicht unnötig weniger Bytes als Pointer durch die Gegend schieben will, aus Gründen)
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    bzgl. Partial Classes:
    Ich nutze das auch in jedem Projekt. Meine größeren Klassen, die also mehr als eine Bildschirmseite ausfüllen, unterteile ich ich mehrere Dateien, um sie thematisch zu sortieren. Als Beispiel: Ich verwende derzeit* die Aufteilung API, Integration, Commands, Queries, Properties bei nicht-GUI-Klassen.
    • API: Alle von außen (also anderen Klassen) zugänglichen Methoden
    • Integration: Methoden (Subs und manchmal auch Functions), die nur andere Methoden aufrufen**
    • Commands: Subs, die nur einfache Dinge ausführen (Variablenwerte setzen) oder Anweisungen an andere Klassen geben
    • Queries: Functions, die Werte berechnen/ermitteln, ggf. mithilfe anderer Klassen
    • Properties: naja, Properties der Klasse eben
    Das ist meine Interpretation von IOSP.

    * hält sich schon so seit ein paar Jahren, scheint für mich also ein passabler Weg zu sein
    ** enthält aber auch zu Methodenbeginn ab&zu Abbruchprüfungen (If … Then Return) und Variablenwertsetzungen (Dim Foo = GetValueOfFoo())

    ##########

    Amelie schrieb:

    wann welche Methoden in eine oder mehrere Klassen gehören
    Wenn eine Methode in mehrere Klassen gehören könnte, wäre es vielleicht sinnvoll, dass diese Methode in eine eigene Klasse gehört, die von anderen genutzt wird.

    Amelie schrieb:

    Vermutlich denke ich oft zu "kompliziert" oder auch zu "simpel"
    Leider kann ich als Einzelentwickler (ich wünschte ich könnte Pair Programming machen, aber ich hab niemanden) nur sagen: Das dauert wohl leider bei jedem von uns, da das Mittelmaß zu finden.

    Amelie schrieb:

    Kleine, kurze Klassen und Methoden, und dann doch wieder vieles in eine Klasse / Methode packen, was diese dann wieder "aufbläht".
    dito

    Amelie schrieb:

    OMG diese Klasse ist viel zu groß!
    Die Klasse ist dann zu groß, wenn sie mehr macht als eine klar umrissene Aufgabe zu erfüllen. Wenn eine Klasse 1000 Zeilen hat, aber ihre Arbeit macht, für die sie gedacht ist, ist das ok. Wenn Du eine Klasse hast, die 100 Zeilen hat, aber zig Aufgaben erledigt, weil die Aufgabe nicht sinnvoll definiert ist, dann ist das schlecht. Die Aufgabe spiegelt sich meist sehr gut im Namen der Klasse wieder. Wenn Du eine Klasse als etwas schwammiges wie AppManager benennst, dann ist die Aufgabe nicht klar umrissen. Wenn sie House oder FileSorter, oder SortableList heißt, dann ist das sehr konkret und die Größe ist egal, solange sich die Klasse um ihren Kram kümmert und nicht um die Angelegenheiten anderer Objekte.


    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Ja, so ähnlich handhabe ich das auch. Nicht unbedingt nach Klassengröße, sondern mehr wenn ich merke dass man die Aufgaben besser aufteilen könnte, aber dennoch sehr ähnlich.

    Ist jedenfalls denke ich auch ein guter Hinweis für dich, @Amelie
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    @VaporiZed @siycah

    Also das mit den Partial Private Class kenne ich und nutze ich gelegentlich auch schon mal. Gerade wenn z.B. das frmMain viele Methoden hat und mir das dann zu "unübersichtlich" wird, teile ich die auf und geben den Dateien für mich sinnvolle Namen.
    Z.B. frmMain_ListviewShows.vb und frmMain_TreeviewShows.vb usw....

    Ja @VaporiZed ich weiß mit der Namensvergabe .... :D hoffe dich da eines Tages "zufrieden zustellen" :thumbsup:

    Ja und in meinem "Übungsprojekt", hatte ich auch erst die für mich zu groß erschienende Class in 2 Partial umgewandelt, dann aber wieder verworfen, weil mir plötzlich auffiel, das ich einiges doppelt hatte.. X(

    Also weiter ....Neu beginn....
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Es scheint mir so, als würdest du gerade einen typischen Anfängerfehler machen und ohne Plan drauflos programmieren.

    Bevor du jetzt anfängst und dich wieder in einer Zwickmühle befindest; nimm dir ein Blatt Papier (ja, das komische analoge Zeugs) und mal ganz grob auf, was du erreichen möchtest.

    Dort werden dir schon Sachen auffallen, die du überarbeiten solltest.
    Danach kannst du zumindest anfangen, deine Struktur niederzuprogrammieren.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Also das komische analoge Zeug nutze ich in der Tat noch sehr oft. Nicht nur beim "programmieren" sondern auch bei meinen Manuskripten für meine Schreiberei.
    Da mache ich mir dann schon einen groben Plan über das was ich in Bits und Bytes umsetzen möchte.
    Leider komme ich oft davon ab, weil mir während ich den Code versuche "gut" umzusetzen immer wieder neue Sachen einfallen oder ich etwas neues lese.

    Z.B. Das mit dem "CleanCode"
    Dann gugg ich mir meine geschriebenen Methoden an und ... schubs fliegen meine Neuronen kreuzundquer... <X
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    weil mir während ich den Code versuche "gut" umzusetzen

    Das ist ein altbekanntes Problem, was jeden von uns betrifft. Es wird mit der Erfahrung aber besser.

    Amelie schrieb:

    einfallen oder ich etwas neues lese

    Auch das ist gerade während der Anfangsphase total normal. Naja. Wenn ich ehrlich bin, nach 16 Jahren ist das bei mir immer noch so... Ganz getreu dem Motto "ooh, shiny!".
    Mein Rat wäre, probier dich ruhig aus, aber nicht auf Krampf. Versuche erst zu verstehen, was genau du da jetzt anders umsetzen möchtest.

    Es ist immer so, dass die erste Iteration suboptimal ist. "Premature optimisation is the root of all evil".
    Schau erstmal zu, dass das Ding funktioniert, wenn auch hässlich, und sobald du einen funktionierenden Prototypen hast, gehst du nochmal lang und änderst es dann ab.

    Amelie schrieb:

    Dann gugg ich mir meine geschriebenen Methoden an und ... schubs fliegen meine Neuronen kreuzundquer...

    Ich weiß nicht wie das für dich ist. Mir geht das auch immer gehörig gegen den Strich, wenn etwas nicht meinen Vorstellungen entspricht. Aber ich habe gelernt, erstmal fertig zu machen, bevor ich refactoring betreibe. Auf die harte Tour.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Noch als allgemeiner kleiner Tipp über den ich leider noch heute oft stolpere: Keep it simple!

    Wir neigen oft dazu Dinge zu verkomplizieren und denken "Oh das könnte ich aber demnächst dort noch gebrauchen".
    Das trifft selten zu und wenn es doch so kommt, füge nur die entsprechende Funktionalität hinzu.

    Kleines Beispiel: ServiceCollection Extension mit Dependency als Parameter?
    Der dort gebauten Extension habe ich bis heute immer nur fest definierte DelegatingHandler übergeben, heißt die Arbeit hätte ich mir sparen können.

    Amelie schrieb:

    ...Was mir nur so Kopfzerbrechen macht, und mir so unnütz viel vorkommt, ist diese Menge an Code...
    :thumbup:
    Das finde ich noch mit am wichtigsten, dass man ein Gefühl bekommt für "...hmm - das ginge doch auch einfacher?..."



    Ansonsten ärger ich mich aber über sowas:

    Amelie schrieb:

    ...waren hier nur als Beispiel gedacht..
    Bitte verschone uns mit solchen "Beispielen", wenn sie mit der Realität nichts zu tun haben.
    Da macht man sich den Kopf, und antwortet leidlich qualifiziert, und dann heissts: "ellabäätsch - war nur ein Beispiel!"
    Da will man garnet mehr antworten, weil man weiss nie: Beschäftige ich mich hier mit einem Problem, oder wieder nur mit einem irrealen Hirngespinst?



    Ansonsten finde ich diesen Thread ziemlich allgemein gehalten. Jo, gute Ratschläge hast du nun bekommen, aber natürlich nix konkretes.
    Weil das einzig konkrete - der Code aus post#1 - ist ja so ein "Beispiel".



    Ich sammel nochma Ratschläge:
    • mach es einfach
    • vorher planen
      • Was soll das Programm tun?
      • Objekte erkennen
      • Aufgaben erkennen
      • den Objekten ihre Aufgaben zuweisen
        nicht irre machen lassen: Mal ergibt sich nur ein Objekt mit 10 Aufgaben, mal 10 Objekte mit je einer Aufgabe

    • einen Prototypen erstmal lauffähig machen, dann überarbeiten (oder gar neu schreiben)
    • richtig benamen
    • sparsam und sorgfältig kommentieren: nur so wenig wie nötig, aber das nötige auch nicht vergessen!
    • Verwende die Programmier-Elemente, die du brauchst - nicht alles was du kannst
    • Methoden nicht über 30 Zeilen
    • Klassen nicht über 300 Zeilen
    • Wenns aber anders nicht sinnvoll ist, dann eben doch Methoden über 30 Zeilen und Klassen über 300 Zeilen
    • Bauchgefühl beachten: bei gefühlt zuvielem Code, oder gefühlt wirrem Code innehalten, überlegen, nachfragen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ErfinderDesRades
    Ich sammel nochma Ratschläge:

    Das schreibe ich mal auf meine Tafel hier am PC. Ja eine echte Tafel mit Kreide! Hilft mir oft! :thumbsup:

    @slice
    ​Wir neigen oft dazu Dinge zu verkomplizieren

    Stimme ich zu und oft denke ich ( in meiner Unefahrenheit ! ) das muss doch einfacher gehen...

    @siycah
    ​Es wird mit der Erfahrung aber besser.

    Das hoffe ich :)


    Nun ja gab wieder viel und Guten Input von Euch allen. Danke erstmal. :thumbup: :thumbup:
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh: