tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
958
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Blackhawk50000
    Blackhawk50000 Blackhawk50000 ist offline Mitglied Brokat
    Registriert seit
    Oct 2007
    Ort
    Erding As, Bayern, Germany, Germany
    Beiträge
    328
    Hallo freunde. wenn ihr lust habt, habe ich hier eine kleine Aufgabe für euch...

    Ich habe eine sehr gut funktionierende Methode zum Filtern von einem List<Object> object geschrieben.

    Ein kollege sagte zu mir, es sei wirklich schlecht zu warten und könnte fast garnicht funktonieren....

    Wenn ihr wollt, schreibt den Code doch mal um =)

    Fragen bezüglich weiteren informationen die vielleicht fehlen, beantworte ich gerne...

    Code :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    /// <summary>
            /// Mit der Schnellsuche auf Du und Du
            /// Ein Bestseller von mir.
            /// 
            /// In dier Methode wird ein Lambda ausdruck zusammengebaut der alle Kombinationen von 5 Checkboxen berücksichtigt.
            /// Diese 5 Checkboxen teilen sich in 2 Gruppe auf.
            /// 
            /// Gruppe 1: Zahlungsart
            /// Gruppe 2: Offener Posten
            /// 
            /// Die Checkboxen für die schnellsuche und die Dazugehörigen eigenschaftswerte sind:
            /// 
            ///     Lastschriftzahler       ----> ZahlungsArt = 1
            ///     Rechnungszahler         ----> ZahlungsArt = 2
            /// 
            ///     Guthaben                ----> Offener Posten kleiner 0
            ///     Keine offenen Posten    ----> Offener Posten = 0
            ///     Forderung               ----> Offener Posten > 0
            ///     
            /// Jede der Checkboxen hat eine eigene Abfrage, die einen Teil des Labdaausdruckes bildet.
            /// Diese Abfragen sind mit der Kurzen IF schreibweise geschrieben um auf den Checked-Status der Checkbox entsprechend zu reagieren.
            /// 
            /// Beispiel normale if-abfrage
            /// 
            ///     if(variable == true)
            ///     {
            ///         string = 1;
            ///     }
            ///     else
            ///     {
            ///         string = 2;
            ///     }
            /// 
            /// Die gleiche Abfrage in Kurzer schreibweise:
            /// 
            ///     variable ? string = 1 : string = 2;
            ///     
            /// Diese Abfragen können beliebig verschachtelt werden. Im Fall der Schnellsuche, wird Jedes Teil der Gruppe mit jedem Teil der Gruppe verschachtelt.
            /// 
            /// 
            /// </summary>
            private void SetQuickSearch()
            {
                if (_zahler != null && _zahler.Count > 0)
                {
     
                    _zahlerSuchErgebnis = _zahler.Where
                        (
                            x =>
                            (
                                (_rechnungsZahler ? x.ZahlungsArt == 1 : (_lastschriftZahler ? x.ZahlungsArt == 2 : false))
                            ||
                                (_lastschriftZahler ? x.ZahlungsArt == 2 : (_rechnungsZahler ? x.ZahlungsArt == 1 : false))
                            )
                            &&
                            (
                                (_guthaben ? x.OffenerPosten < 0 : (_keineOffenenPosten ? x.OffenerPosten == 0 : (_forderung ? x.OffenerPosten > 0 : false)))
                            ||
                                (_keineOffenenPosten ? x.OffenerPosten == 0 : (_guthaben ? x.OffenerPosten < 0 : (_forderung ? x.OffenerPosten > 0 : false)))
                            ||
                                (_forderung ? x.OffenerPosten > 0 : (_guthaben ? x.OffenerPosten < 0 : (_keineOffenenPosten ? x.OffenerPosten == 0 : false)))
                            )
                            &&
                            (
                                (_mahnstatusGleichNull ? x.Mahnstatus == 0 : x.Mahnstatus == 1)
                            )
                        ).ToList();
     
                    ABR_LadeZahlerCompleteEvent(_zahlerSuchErgebnis, "");
                }
            }
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Also die Arbeit wird dir keiner abnehmen!
    Aber:
    3 Punkte im Code schrenken die Wartbarkeit ein:
    1. die Lambda-Expression, noch dazu wenn sie so riesig und komplex ist
    2. die Nutzung des ?:-Operators, den du hier exzesiv nutzt
    3. die Kombination beider

    Kurz gesagt. Sollte in der Bedingung ein Fehler sein, ist es fast unmöglich diesen zu finden, da es keine Möglichkeit gibt, die einzelnen Bestandteile der Bedingung zu analysieren (per Debugger)
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Soweit ich seh geht es wohl um Mahnungen der Debitoren.
    Aber ansonsten empfinde ich es auch eher als schwer zu lesen und wie schon gesagt schwer zu kontrollieren.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  4. #4
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Die Nameskonvention ist übrigens auch weit weg von allen Geflogenheiten
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  5. #5
    Avatar von Blackhawk50000
    Blackhawk50000 Blackhawk50000 ist offline Mitglied Brokat
    Registriert seit
    Oct 2007
    Ort
    Erding As, Bayern, Germany, Germany
    Beiträge
    328
    Hm, also die namensgebung ist leider nicht auf meinem mist gewachsen. Die ist in der Firma vorgegeben und ich muss mich dran halten. =)

    zweitens, Mahnungen der Debitoren**** Nicht ganz. es geht einfach nur um eine schnellsucher von personen nach kriterien.

    Um Debitoren kümmere ich mich in einem Jahr =)

    an Nico: Die Nutzung des ? Operators ist in diesem fall leider unumgänglich da eine lange if-schreibweise nicht innerhalb eines lambda ausdruckes unterstüzt wird.

    die lambda-expression ist wirklich lang da gibt es nichts zu bestreiten, allerding geht es hier auf um die wahllose kombination von 5 schnellsuchkriterien.

    und keine angst, hier geht es nicht darum, dass mir jemand arbeit abnimmt. ich wolltedas einfach nur mal just 4 fun rein schreiben.
     

  6. #6
    Avatar von VScan
    VScan VScan ist offline Mitglied Gold
    Registriert seit
    Dec 2008
    Ort
    Munich
    Beiträge
    131
    Hey,

    also meiner Meinung nach (die vielleicht nicht sehr wichtig ist ) ist der Kode sehr sauber.

    Wie würde denn sowas sonst aussehen, wenn ich 5 Kriterien habe, die zu prüfen sind?

    Klar kann man sowas leserlicher schreiben, aber ich denke, dass Dein Chef erstma' eine Suchmaschine benutzen musste, um den Kode zu verstehen, was Ihm wahrscheinlich nicht gepasst hat.

    Insgesamt würde der Kode viel mehr Zeilen haben, wenn man es "leserlicher" schreiben würde, ausserdem, wer einen Bildschrim hat, der breit genug ist, kann es auch nebeneinander schreiben, was ich persönlich bevorzuge, naja, solange es nicht über den Rand reicht.


    Viele Grüße

    VScan


    Edit:
    Verstehe auch nicht, was es an der Namensgebung zu meckern gibt, ich hab schon die ungewöhnlichsten Sachen gesehen, da sieht das doch ganz ok aus.
    Ausserdem fehlt nicht viel zur MS-Namenskonvention, die einfach mit "m_" anfängt für "MemberAttributes", also ist das eigentlich ganz ok.
    Geändert von VScan (08.12.11 um 02:31 Uhr) Grund: Namensgebung
     

  7. #7
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Zitat Zitat von VScan Beitrag anzeigen
    Wie würde denn sowas sonst aussehen, wenn ich 5 Kriterien habe, die zu prüfen sind?
    Dafür müsste man das Objektmodell genauer kennen, es sieht halt erstmal komplizierter aus als es sein müsste.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  8. #8
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von Blackhawk50000 Beitrag anzeigen
    an Nico: Die Nutzung des ? Operators ist in diesem fall leider unumgänglich da eine lange if-schreibweise nicht innerhalb eines lambda ausdruckes unterstüzt wird.
    Das If-Else innerhalb von Lambda nicht funktioniert weiß ich. Das legitimiert aber noch nicht die mangelnde Wartbarkeit des Codes!
    Zitat Zitat von Blackhawk50000 Beitrag anzeigen
    die lambda-expression ist wirklich lang da gibt es nichts zu bestreiten, allerding geht es hier auf um die wahllose kombination von 5 schnellsuchkriterien.
    Dafür ist LINQ aber nicht gemacht. Ich glaub fast, dass du mit einer Schleife und If-Else schneller zur Runtime bist! Falls du hier auf eine DB zugreifst wäre ein optimierter Query hier auch besser. LINQ ist nicht immer das beste Mittel um ein Ziel zu erreichen! Aber einer gewissen Komplexität wird es langsam.
    Zitat Zitat von Blackhawk50000 Beitrag anzeigen
    und keine angst, hier geht es nicht darum, dass mir jemand arbeit abnimmt. ich wolltedas einfach nur mal just 4 fun rein schreiben.
    Der erste Post lies halt auch eine andere Interpretation zu

    Trotzdem: Die Netiquette gilt weiterhin! Also auch mal die Shift-Taste nutzen!
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

Ähnliche Themen

  1. Spiel
    Von MasterOfTheDark im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 29.05.09, 20:45
  2. Ein Spiel mit Ant :)
    Von Thomas Darimont im Forum Java
    Antworten: 1
    Letzter Beitrag: 04.01.06, 18:32
  3. Lan Spiel
    Von skatejoe im Forum Flash Plattform
    Antworten: 8
    Letzter Beitrag: 16.08.05, 12:31
  4. Spiel
    Von torrential im Forum Java
    Antworten: 6
    Letzter Beitrag: 30.09.03, 13:40
  5. 3D Spiel in C++
    Von Benedikt im Forum C/C++
    Antworten: 13
    Letzter Beitrag: 14.11.02, 13:27