Schrift
[thread]2911[/thread]

Entwicklung kleiner bis mittlerer Webapplikationen: Entwicklungsmodell?

Leser: 1


<< >> 6 Einträge, 1 Seite
Ronnie
 2004-06-28 10:56
#29283 #29283
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ich habe vor gut einem Jahr mit der Perl-Programmierung begonnen. Damals wollte ich nur ASCII-Daten aus einer Messwerterfassung in eine .csv-Datei wandeln, die das Auswertungsprogramm auch versteht. Perl war damals das optimale Werkzeug, weil ich schnell Erfolge erzielen konnte ohne großen Einarbeitungsaufwand. Ich hatte ein paar sed- und awk-Kenntnisse und konnte meine Aufgabe innerhalb weniger Tage lösen. Das selbe Problem würde heute keine fünf Minuten in Anspruch nehmen.

Intranet-Applikationen sind seit Jahren ein Thema in dem Unternehmen für das ich arbeite, also folgte der nächste Schritt. Die Entwicklung einfacher CGIs. Ich hatte vorher schon mit ASP.NET experimentiert, aber mir fehlte der Unterbau an Wissen um effektiv damit zu arbeiten. Außerdem setzen wir zum größten Teil Linux auf den Servern ein, und Geld für einen kommerziellen Datenbankserver wollte auch keiner ausgeben. Zu diesem Zeitpunkt existierte noch kein mySQL-.NET-Dataprovider. Ein MySQL auf einem der Debian-Server zu installieren war aber eine Sache von Minuten.

Die ersten CGIs waren dann entsprechend. Eine HTML-Seite mit dem Formular und das CGI zur Verarbeitung der Daten. Natürlich verwendete ich die obligatorischen HERE-Dokumente. Mit der Entdeckung von DBI machte ich aber zügig Fortschritte. Die ersten kleineren Web-Applikationen kamen zustande. Unsere Mitarbeiter-Datenbank entwarf ich zu diesem Zeitpunkt.

Ein großer Schritt war dann das Verständnis von Referenzen und verschachtelten Datenstrukturen. Dies war die Vorraussetzung zum Einsatz von HTML::Template, das ich bis heute verwende. Zu diesem Zeitpunkt habe ich angefangen auch etwas kompliziertere Anwendungen anzugehen und Erweiterungen zu älteren Projekten zu schaffen. Auswertungen zur Mitarbeiter-Datenbank, waren das erste wofür ich HTML::Template eingesetzt habe.

Das letzte Vierteljahr habe ich mich langsam mit OOP und Perl auseinandergesetzt. Die Hauptschwierigkeit ist für mich - mich mit Themen auseinanderzusetzen an denen ich früher einmal gescheitert bin. Ich habe mal drei Wochen lang in C++ Klassen für Stack und Queue auf Grundlage von verketteten Listen mit Zeigern programmiert. Das war wärend meiner Techniker-Ausbildung und das Ende all meiner C/C++ Bestrebungen. Okay, es hat zum Schluss funktioniert aber der Aufwand stand in keinem Verhältnis zum Ergebniss.

Jetzt überarbeite ich die Mitarbeiter-Datenbank. Eigentlich programmiere ich sie komplett neu. Der erste Schritt war die Trennung von Datenbankzugriff und dem Rest. Ich habe eine Klasse geschrieben die (noch unvollständig) sämtliche Zugriffe auf Tabellen der Datenbank übernehmen soll. Als Option für die Zukunft betrachte ich hier Class::DBI - aber jetzt wollte ich es erstmal selbst probieren. Der Konstruktor stellt die Verbindung zur Datenbank her und erzeugt ein Datenbankhandle. Sämtliche Zugriffe auf die Datenbank erfolgen dann über Objekt-Methoden.

Code: (dl )
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
package db_staff;
use YAML qw (LoadFile);
use DBI;

#
# Constructor
#

sub new {
 my $class = shift;
 $class = ref($class) || $class;
 my $self = {};
 $self->{dbh} = &connect_to_db();
 bless($self, $class);
 return $self;
}

#
# Helper
#

sub connect_to_db {
 my $config = LoadFile('conf/conf.yaml');
 my $dbh = DBI->connect ("DBI:mysql:host=$config->{db_host};database=$config->{db_database}",
  $config->{db_user}, $config->{db_pass}, {PrintError => 0, RaiseError => 1})
  or die "Failed to connect via DBI:$!\n";
 return $dbh;
}

# yada yada yada


Ich kann die selbe Klasse für das CGI verwenden, genauso wie um Excel-Sheets mit Spreadsheet::WriteExcel zu erzeugen, oder die Daten in einer TK-Applikation zu nutzen. Natürlich wäre das auch mit einem klassischen Modul möglich.

Ich denke ich werde sämtliche HTML bezogenen Dinge ebenfalls in eine Klasse stecken. Hier ist weniger der Vorteil dass ich es an mehreren Stellen verwenden kann, als dass ich eine saubere Trennung zwischen Datenbank, Applikation und Präsentation erreichen kann. Die eigentliche Applikation - das CGI - wird dadurch relativ kompakt und übersichtlich. Dies erhöht auch die Wartbarkeit zu einem späteren Zeitpunkt.

Wer es bis hier hin durchgehalten hat, fragt sich jetzt wo mein Problem den ist, oder? Ich suche Verbesserungsmöglichkeiten! mod_perl steht schon auf der TODO-Liste, aber ich denke das es noch das eine oder andere gibt was man verbessern kann. Mir geht es mehr um die Konzepte als die konkrete Implementierung. Ich würde mich freuen von euch zu hören, wie ihr solche Applikationen entwickelt.

Gruss,
Ronnie
renee
 2004-06-28 11:27
#29284 #29284
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kann mal ein wenig darüber sagen, wie das bei PBoard gelöst ist...

Hier gibt es ein relativ schlankes Hauptprogramm, in dem ein CGI-Objekt erzeugt wird. Damit bekommt man den Wert des Parameters "action".
Ein Hash, der in einem Config-Modul steht, enthält die Referenz auf alle Möglichen Methoden. Als Schlüssel des Hash dienen die möglichen Werte des "action"-Parameters.

Die Methoden sind in unterschiedlichen Modulen untergebracht, je nach Funktionalität...

Es gibt das Config-Modul. Hier sind alle möglichen Konfigurationen wie Mailserver, Terms of Usage, DB-User etc. eingetragen. Sind Änderungen von Nöten, muss man diese nur in diesem Modul vornehmen.

Im DB-Modul stehen die Methoden für die verschiedenen Zugriffe auf die Datenbank (SELECT, INSERT, UPDATE etc...)

Im User-Modul sind die Methoden, die Benutzerinformationen wie SessionID (erzeugen, validieren...) betreffen, enthalten.

Action-Modul: die meisten Methoden, auf die der Hash verweist. Z.B. view_posting etc. Diese Methoden benutzen häufig Methoden aus anderen Modulen.

Diese Struktur ist vielleicht auf den ersten Blick etwas verwirren, aber da verschiedene Entwickler daran arbeiten ist diese Struktur ziemlich praktisch. Wenn einer etwas für die Datenbank programmiert hat, dann muss man nicht ein großes Modul durchsuchen, bis man die Änderung gefunden hat, sondern braucht nur in dem DB-Modul zu schauen.

Änderungen sind relativ leicht durchführbar...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
lichtkind
 2004-06-28 12:27
#29285 #29285
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
packe zusammen was für dich sinn macht
und das kann sich ja ändern, wichtig ist immer ein gefühl von handlichkeit
das du merkst du beherschst den code nicht umgekehrt
dort wo einstellungen zu machen sind sollten sie frei stehen ohne vie gedöhns drumrum
damit andere soweit beteiligt ihren krams anpassen können
eine zentrale stelle wo externer kram eingebunden wird
....usw
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Ronnie
 2004-06-28 23:40
#29286 #29286
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Danke an euch zwei erstmal. Ist der PBoard-Code eigentlich frei verfügbar? Dann würde ich mal reinschauen, was ihr da so gemacht habt.

Gruss,
Ronnie
renee
 2004-06-29 00:44
#29287 #29287
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hier findest Du einen Link zu den Sourcen (am Ende des ersten Beitrags): http://board.perl-community.de/cgi-bin....8;t=124
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pktm
 2004-06-29 17:18
#29288 #29288
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Schau dir mal CGI::Application an, das ist glaube ich genau das, was du suchst (beinhaltet auch HTML::Template ;) ).
Damit kann man ganz fix schmucke CGIs zaubern.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 6 Einträge, 1 Seite



View all threads created 2004-06-28 10:56.