Du machst immer so viel, wie momentan n�tig ist. "The smallest thing that could possibly work."
Wenn Du in der ersten Iteration _eine_ Businessklasse hast, macht es keinen Sinn, schon eine Basisklasse zu haben. Wenn Du die zweite Businessklasse implementiert hast, wird refaktoriert und dann _kann_ es sein, dass die beiden Klassen eine Basisklasse erhalten. Es kann auch sein, das das keinen Sinn macht. Das musst Du entscheiden. Die erste Iteration unserer Software war eine leere Webseite und der Test hat sichergestellt, dass eine leere Seite angezeigt wird. Dann wurde getestet, dass ein Loginformular angezeigt wird und dass man auf den Button klicken kann. Dann wurde getestet, dass man, wenn man einen richtigen Benutzernamen eingibt auf eine bestimmte Seite umgeleitet wird. Dann wurde getestet, dass bei einem falschen Benutzernamen eine Fehlermeldung kommt. --> _fr�hestens_ an dieser Stelle war der erste Datenbankzugriff notwendig --> an dieser Stelle kann das eine einfache Loginklasse mit einer Methode bool IsUserDataValid(name, password) sein, die true oder false zur�ck gibt. Indem man die Schritte so klein, wie m�glich h�lt, erreicht man, dass Die Tests m�glichst viel abdecken. Die Architektur entsteht aus dem Bedarf und durch das Refaktorieren. Das ist ein ziemlicher Lernprozess (von dem ich zugebe, dass er bei mir nicht abgeschlossen ist). Gru� Markus -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Christian Arnold Sent: Donnerstag, 27. M�rz 2003 14:25 To: [EMAIL PROTECTED] Subject: AW: [Asp.net] OOP / ASP.NET allgemeine Vorgehensweise Ok, verstehe, eigentlich bin ich auch Fan von XP... :-) Wenn ich's richtig verstanden habe sollte ich also z.B. mit einer allgemeinen Klasse Login Anfangen, die durch �berladen dazu gebracht wird, eine Art Allgemeing�ltigkeit zu erlangen, sprich in Zukunft wiederverwendbar ist... Und dann eine Klasse, die alle m�glichen Formen der Datenbankabfrage bereit stellt? Ok, aber jetzt denke ich wieder kurz nach,und stelle mir die Frage, kann eine solche Klasse auch in Zukunft funktionieren? Antwort eigentlich ja schon , oder ? Also mehr als Select, Insert und Update bzw Delete wird ja nicht vorkommen....? Ok, hat jemand ein Simples Beispiel ,wie ich die Klasse Datenbank so angehe, dass Sie dynamisch ist, sprich z.B. eine SELECT Abfrage mit WHERE Klausel so stelle, dass Sie beliebig viele Paramter aufnehmen kann, ohne vorher zu wissen, wie viele eigentlich gebraucht werden? Oh je, ich stelle mich vielleicht an... ;-) Gruss Christian -----Urspr�ngliche Nachricht----- Von: Markus Renschler [mailto:[EMAIL PROTECTED] Gesendet: Donnerstag, 27. M�rz 2003 13:28 An: [EMAIL PROTECTED] Betreff: RE: [Asp.net] OOP / ASP.NET allgemeine Vorgehensweise Hallo Christian, ich kann mal umrei�en wie wir es hier machen. Wir entwickeln ein Internetportal f�r den Support in unserer Firma. Kern des Produkts sind nat�rlich die Businessobjekte. Diese sollen UI-Unabh�ngig dazu in der Lage sein, alle Transaktionen auf der Datenbank durchzuf�hren. Gleichzeitig sollen sie die Prozesse m�glichst greifbar objektorientiert darstellen. Nehmen wir z.B. die Klasse SupportCall. Diese Klasse ist abgeleitet von BusinessObject, Businessobject kann wiederum Funktionen haben, die Save/Retrieve von der Datenbank (bzw. dem darunterliegenden Datenlayer) regelt. Die SupportCall-Klasse wiederum hat als Properties z.B. Caller - vom typ Individual, ein Individual geh�rt zu einer Company. Was ich ausdr�cken will: Du schiebst keine IDs durch die Gegend, sondern arbeitest mit Objekten. Um einen neuen Call zu er�ffnen, kann das z.B. hei�en: SupportCall call = new SupportCall(); call.Caller = myCustomer; // hier steckt man ein Customer-Objekt rein (...) call.Save(); Die ID des calls findest Du nun in call.ID **** Wie anfangen? Wir arbeiten hier nach den Grunds�tzen von Extreme Programming. Unter anderem ist einer der Ans�tze test first. Bevor Du eine Funktion einbaust, muss Dich ein Test dazu zwingen, das zu tun. Wahrscheinlich brauchen wir mehr Zeit, um Tests zu schreiben, als f�r die eigentlichen Funktionen, aber es lohnt sich, denn die Qualit�t der Software bleibt - egal wie man die Architektur 'unter der Haube' umstellt - gew�hrleistet. Andernfalls wird Dir das Testingframework schon rote Balken um die Ohren hauen. Man sichert sich Flexibilit�t, ohne die Funktionalit�t zu riskieren. Ein Beispiel: Du baust eine Objektorientierte Anwendung. Irgendwann kommen neue Anforderungen dazu und Du siehst, dass unter diesem Gesichtspunkt die Architektur anders besser w�re. Jetzt hast Du mehrere M�glichkeiten: - auf die bessere Architektur verzichten, da Du nicht absehen kannst, ob noch alles funktioniert, wenn Du erst umgestellt hast - die Umstellung wagen und anschlie�end ein paar Wochen im UI rumklicken um m�glichst alle Eventualit�ten abzudecken - die Umstellung machen und die Tests laufen lassen. Wir haben hier schon innerhalb weniger Tage sehr viel Architektur umstellen k�nnen; die Qualit�t ist dabei gleich geblieben. Das gleiche, wenn ein Fehler auftritt: Der Fehler wird erst gefixt, wenn ein Test das verlangt. Man erreicht damit, dass der gleiche Fehler keine zwei mal auftreten kann. Unsere Werkzeuge f�r die Businessobjekte sind: - Visual Studio.NET - Zum Testen csUnit http://www.csUnit.org/ Auf csUnit.org und im Programmverzeichnis (wenn installiert) sind Beispiele. - Zum Refaktorieren C#Refactory (http://www.xtreme-simplicity.net/) Da es um Web-UIs zu testen noch keine brauchbare .NET-L�sung gibt, verwenden wir an dieser Stelle Java: - IntelliJ IDEA als IDE http://www.intellij.com (klappt auch super mit eclipse (kostenlos)) - JUnit f�r beide IDEs als Plugin erh�ltlich, sonst http://www.junit.org/ - httpunit, um objektorientiert auf webseiten zugreifen zu k�nnen (http://httpunit.sourceforge.net/) Der komplette test first - Ansatz (und nat�rlich vieles mehr) wird auf einschl�gigen eXtreme Programming - Websites erkl�rt: http://www.xprogramming.com/ http://www.xpexchange.net/ http://xp.c2.com/ExtremeProgramming.html Was ich sagen will: Verschwende nicht zu viel Zeit in die Architektur. Keiner ist so genial, dass er zu Projektbeginn alles �berblicken kann. Zieh Deine Anwendung testgetrieben, St�ckchen f�r St�ckchen hoch. Refaktoriere nach jedem St�ckchen (kann man den Code einfacher schreiben? Gibt es bereits im Projekt Code, der sowas �hnliches macht? Kann man Code zusammenfassen? Wenn ja, dann tun). Codeduplikate vermeiden (http://c2.com/cgi/wiki?OnceAndOnlyOnce)). Wenn sich die M�glichkeit bietet: Verwende design patterns (http://c2.com/cgi/wiki?DesignPatterns) Ich w�sste noch einiges zu erz�hlen. Vielleicht mehr bei Gelegenheit. Gru� Markus ------------------ Professionelles .NET Hosting auf leistungsf�higen Servern. ASP.NET, VS.NET, XML, CDO, SQL 2000 und vieles mehr. Informieren Sie sich jetzt unter http://www.aspnet.de _______________________________________________ Asp.net mailing list [EMAIL PROTECTED] http://www.glengamoi.com/mailman/listinfo/asp.net ------------------ Professionelles .NET Hosting auf leistungsf�higen Servern. ASP.NET, VS.NET, XML, CDO, SQL 2000 und vieles mehr. Informieren Sie sich jetzt unter http://www.aspnet.de _______________________________________________ Asp.net mailing list [EMAIL PROTECTED] http://www.glengamoi.com/mailman/listinfo/asp.net ------------------ Professionelles .NET Hosting auf leistungsf�higen Servern. ASP.NET, VS.NET, XML, CDO, SQL 2000 und vieles mehr. Informieren Sie sich jetzt unter http://www.aspnet.de _______________________________________________ Asp.net mailing list [EMAIL PROTECTED] http://www.glengamoi.com/mailman/listinfo/asp.net
