Sauberes Programmieren

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von almheidy.

    Sauberes Programmieren

    Hey Leute, dank eurer Hilfe nähert sich mein Projekt jetzt dem "Feintuning".



    Ich hab mir heute mal die Beiträge zum "sauberen Programmieren" angeschaut, hab dazu aber noch eine Frage welche ich an einem Beispiel erläuteren möchte.

    Code soll ja möglichst nicht Wiederholt werden (mit C&P) sondern möglichst immer wieder angesprochen über z.B. Module.

    Wenn ich jetzt z.B. mehrere Listboxen oä. habe welche ich mit einem "ADD" Button befüllen möchte, macht es da Sinn den Code auszulagern? Da ja jedes mal neue "Ziele" ausgewält werden. Hier ein kleines Bsp.:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ''______________________________ADD Items to lstVorabStuli___________________ 
    2. Private Sub cmdAddStuli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAddStuli.Click
    3. If OFDAddlblProduct.ShowDialog() = System.Windows.Forms.DialogResult.OK ThenFor Each s As String In OFDAddlblProduct.FileNames
    4. lstVorabStuli.Items.Add(s)
    5. Next
    6. End If
    7. End Sub
    8. ''_____________________Add Items to lstProduct_________________
    9. Private Sub cmdAddProduct_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAddProduct.Click
    10. If OFDAddlblProduct.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 'ruft OFDAddlblProduct-Dialog auf
    11. For Each s As String In OFDAddlblProduct.FileNames 'fuegt Items entsprechend hinzu
    12. lstProducte.Items.Add(s)
    13. Next
    14. End IfEnd Sub


    Macht es Sinn so ein Code auszulagern und über die Variablen dann die zu befüllende Liste zu bestimmen oder ist es "sauberer" das so stehen zu lassen?

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

    @almheidy:
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. Using dlg As New OpenFileDialog
    3. dlg.Multiselect = True
    4. If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then
    5. Me.lstVorabStuli.Items.AddRange(dlg.FileNames)
    6. End If
    7. End Using
    8. End Sub
    Und nimm bitte das "mit Modulen" aus dem Titel raus, das ist echt irreführend.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @almheidy:
    Zur Wiederverwendbarkeit: Du könntest das zum Beispiel so machen:

    VB.NET-Quellcode

    1. Private Sub AddItems(list As Listview) 'oder Listbox?
    2. Using dlg As New OpenFileDialog
    3. dlg.Multiselect = True
    4. If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then
    5. list .Items.AddRange(dlg.FileNames)
    6. End If
    7. End Using
    8. End Sub
    9. ''______________________________ADD Items to lstVorabStuli___________________ 
    10. Private Sub cmdAddStuli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAddStuli.Click
    11. AddItems(lstVorabStuli)
    12. End Sub
    13. ''_____________________Add Items to lstProduct_________________
    14. Private Sub cmdAddProduct_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAddProduct.Click
    15. AddItems(lstProducte)
    16. fEnd Sub

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Meiner Meinung nach, fängt sauberes Programmieren schon ein Stück vor diesem Beispiel an. Denn es stellt sich die Frage, warum sich so viele ListBoxen auf der Form befinden, dass es sich auszahlen würde, eine ListBox-Befüll-Methode zu schreiben?
    Möglicherweise könntest Du die Form umgestalten. Also dass man nicht 20 ListBoxen auf einmal sieht, sondern dass man zwischen denen hin und her wechseln kann. Dazu könntest Du Dir ein UserControl basteln, das an mehrere unterschiedliche Listen gebunden ist. Dann gibt's eine Property, die bestimmt, welche Liste gerade angezeigt wird. Und es gibt dann auch nur eine ListBox und einen Button.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @almheidy: Zur Kommentierung von Funktionen und Membern mach mal über ihnen 3 Kommentarzeichen und Enter: :thumbsup:

    VB.NET-Quellcode

    1. '''
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ RodFromGermany

    :thumbsup: Klappt supper, werd ich das dann lieber so machen

    @ Niko Ortner

    Ne, die Listboxen werden so gebraucht, und müssen sich auch auf derselben (dergleichen ?( ) Oberfläche befinden, da der Benutzer erst eine Tabelle mit CAD Daten füllt, diese dann abgearbeitet wird und aus den Daten dann eine StüLi erstellt werden soll. Wurde eine Datei "Abgearbeitet" erscheint sie in der neuen lstBox. Falls nun aber schon Daten vorhanden sind die noch zusammengefasst werden sollen kann über "Add" die jeweilige Datei noch hinzugefügt werden. ^^

    @ vb-checker

    Ja das noch schöner :rolleyes: , übernehm ich dann mal so in mein Projekt falls du nichts dagegen hast.



    Danke soweit an alle!

    RodFromGermany schrieb:

    @almheidy: Zur Kommentierung von Funktionen und Membern mach mal über ihnen 3 Kommentarzeichen und Enter: :thumbsup:

    VB.NET-Quellcode

    1. '''

    Ein Rechtsklick und "Kommentar einfügen" bewirkt das Gleiche ;) oder?!
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    bewirkt das Gleiche
    Ja.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ vb-checker


    Ich musste für mein Projekt Excel und Systemdaten einbinden. Wenn ich jetzt mit deinem Vorschlag im "Projekt" arbeiten möchte sagt er mir :

    Fehler 1 "ListBox" ist nicht eindeutig. Importiert aus den Namespaces oder Typen "Microsoft.Office.Interop.Excel, System.Windows.Forms".

    Kann man den Fehler umgehen? Hab dazu leider noch nichts gefunden
    Das heißt das VS nicht klar ist ob die Listbox aus Microsoft.Office.Interop.Excel oder System.Windows.Forms kommt.

    du könntest Listbox durch System.Windows.Forms.ListBox ersetzen ( oder durch Microsoft.Office.Interop.Excel.Listbox je nachdem welche verwendet wird)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    almheidy schrieb:

    Kann man den Fehler umgehen?
    Offensichtlich hast Du 2 disjunkte Klassen, die ListBox heißen.
    Entweder Du benennst den Import explizit oder Du schreibst den Namespace vor die Deklaration:

    VB.NET-Quellcode

    1. Imports MyListBox = System.Windows.Forms.ListBox
    2. ' oder
    3. Dim MyListBox1 = New System.Windows.Forms.ListBox
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!