2009-02-05 6 views
5

Ich arbeite an einer 10-seitigen Website mit einem Datenbank-Back-End. Es werden mehr als 500 Objekte verwendet, die versuchen, das MVP-Muster in ASP.Net zu implementieren. Ich führe die Code-Ausführung von einer einzelnen Seite aus, mein Finger war in F-11 in Visual Studio für etwa 40 Minuten, es scheint kein Ende zu geben, möglicherweise mehr als 1000 Methodenaufrufe für eine Webseite! Wenn es nur 50 Objekte wären, wäre das eine Sache, aber die Codeausführung schlängelt sich durch all diese Objekte, genau wie Millionen von Ameisen, die hektisch in ihrem riesigen, von Objekttunnels durchsetzten Erdhügelhaus arbeiten. Daher wird ein neues Anti-Muster geboren: AntFarm.AntFarm Anti-Pattern - Strategien zu vermeiden, Antidote zu heilen von

AntFarm ist auch bekannt als "OO-Madnes", "OO-Fever", OO-ADD oder einfach Design-Muster-Junkie.

Dies ist nicht das erste Mal, dass ich das gesehen habe, noch meine Kollegen in anderen Unternehmen. Es scheint, dass dieser Stil aktiv propagiert wird, oder in jedem Fall ist ein Missverständnis der zahlreichen OO/DP-Evangelien herum ...

Ich möchte ein Anti-Muster auf die Anti-Muster einzuführen: GST oder "Get Stuff Done" AKA "Get Sh ** getan" AKA GRD (GetRDone). Dieses Muster konzentriert sich genau auf das, was es sagt, auf einfache Art und Weise. Ich werde versuchen, es in einem späteren Post mehr zu skizzieren, oder teilen Sie Ihre Ideen zu diesem Antidot-Muster.

Wie auch immer, ich bin mitten in einem großartigen Beispiel für AntFarm Anti-Pattern, während ich schreibe (als Bonus gibt es keine Dokumentation oder Kommentare). Bitte teilen Sie Ihre Gedanken darüber, wie dieses Anti-Muster so präsenter geworden ist, wie wir es vermeiden können und wie man dieses Muster in einem Live-System, mit dem man arbeiten muss, ungeschehen machen oder damit umgehen kann!

+0

Sind die Objekte Unit-getestet? –

+0

gute Frage, ich glaube, das Entwickler-Team glaubte, dass sie einige Unit-Tests machten ... wie viele andere Muster, die sie implementierten, würden sie mit einer Idee beginnen und dann in der Hitze des Gefechts manchmal auseinanderfallen. Mit dieser komplizierten Architektur bin ich mir jedoch nicht sicher, ob Unendlichkeitstests für sich alleine helfen würden. – alchemical

Antwort

8

Ich denke, dass Parnas es ziemlich in On the Criteria to be used in Decomposing Systems into Modules genagelt hat. Jedes Modul sollte eine Designentscheidung verbergen, die sich in der Zukunft ändern könnte. In der Regel ist ein Modul mit nichts zu verbergen in der Regel nur Overhead. Er sprach nicht über Klassen genau, aber ich denke, dass die Argumentation immer noch gilt.

1

Dank Glomek ist der Artikel für einen interessanten Problem-Raum, geht zum Kern dessen, was OO ist, d. H. Wie Sie Ihre Objekte entwerfen ... für Erfolg oder Misserfolg, danke für den Link.

Oh ja, das Anti-Pattern-Design könnte "Ant Hill" heißen, das ist eine klarere Beschreibung, denke ich. Ich glaube, es ist momentan ziemlich prädeutig und scheint zu wachsen ... Ich frage mich immer noch, wie wir im Allgemeinen davon wegkommen und klareren, einfacheren Code schreiben können, der die Arbeit mit der minimal erforderlichen Komplexität erledigt .

3

Wenn ist in der Tat aufgrund Over-Design (und es klingt wie es), dann sind hier einige Synonyme für Sie:

Gas Factory
Rube Goldberg Maschine
Heath Robinson contraption

Aber meine persönlichen Namen dafür "versucht auch F # $% 3n schwer". Mein Beileid.

Prost Adrian

+0

das ist eine gute Möglichkeit, es (die letztere Beschreibung) zu setzen! – alchemical

+0

Sie haben "Enterprisey" vergessen – GazTheDestroyer

2

Viele Dateien, wo man tun würde. Böse. 500 Objekte für 10 Webseiten scheinen ein verrücktes Verhältnis zu sein. Haben Sie eine laufende Codeanalyse für die Lösung in Betracht gezogen? Könnte dir ein paar interessante Statistiken geben, mit denen du dich wehren kannst.

Auch ich würde das anti-anti-pattern KISS nennen.

0

Das Problem hier ist, dass Ihr Entwurfsmuster selbst nicht-OO ist. Beginnen Sie mit einem Nicht-OO-Muster, versuchen Sie, es als "Objekte" zu implementieren, Sie werden mit einem Chaos konfrontiert.

Nur weil das System in einer OOPL geschrieben wird, macht das System OO nicht.

0

Wenn man bedenkt, dass eine Ameisenfarm eine effiziente Möglichkeit ist, einen komplexen Problemraum (die Ameisenfarm) durch die Verwendung einfacher Mittel (Ameisen) zu erforschen, dann sieht das entschieden weniger anti-patternish aus.

Kritik von OOP basierend auf der Komplexität von "Fitting alles in Ihrem Kopf" immer ignorieren, dass (a) es schwierig ist, alles in Ihrem Kopf (egal ob OO oder nicht) und (b) dass OO reduziert aktiv die Notwendigkeit, alles in Ihrem Kopf zu haben

+0

Also Ihr ein Anwalt der Verwendung von 50 Objekten, um eine grundlegende Webseite Denkschule zu erstellen? Es gibt ziemlich viele von euch da draußen ... – alchemical

+0

Eine grundlegende String-Konkatration würde Sie wahrscheinlich an 50 Objekten vorbeibringen, ganz zu schweigen von dem ganzen Standard, der benötigt wird, um Sie mit HTTP-Anfragen zu versorgen. Was die Zahl ist akzeptabel ... Ich würde keine Zahl auf die Anzahl der Objekte aus dem gleichen Grund setzen, würde ich nicht eine Zahl auf die Anzahl der Elemente, die Sie in Ihrer gerenderten Seite haben können, wird es abhängig sein Was macht die Seite? – CurtainDog