Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5341[/thread]

komplexe programme übersichtlich halten



<< >> 5 Einträge, 1 Seite
popcorn5
 2007-06-25 00:25
#46527 #46527
User since
2003-09-24
60 Artikel
BenutzerIn
[default_avatar]
Hi,

hab da ein grösseres Projekt mit TK. Viele verschiedene Oberflächen die ich in einem Script zusammenfassen "wollte". Leider wird das ganze nach gut 2000 Zeilen unübersichtlich und ich muss mich mehr mit der Frage "was habe ich da bloss gemacht" beschäftigen als dass ich wirklich weiterkomme.

kurz erklärt: Ich habe sehr viele (etwa 50) verschiedene Oberflächen die je nach Bedarf geladen werden. Ich hab den ganzen Salat in sub's stehen und springe von Sub zu Sub. Jedesmal zerstöre ich den Mainframe und baue ihn wieder neu auf. Ich muss aber auch ne Menge Zeugs hin und herschieben, zum Grossteil Zeichenketten die ich den Einzellnen Sub's beim Aufruf übergebe. Nicht schön, aber selten.

Was ich bräuchte wären mal ein paar Tips wie man so etwas richtig angeht, vielleicht auch selbsgeschriebene Module einsetzt oder das ganze in mehrere Programme unterteilt.

Danke für die Mühe.

Mfg
Sucher
 2007-06-25 02:11
#46528 #46528
User since
2007-03-26
47 Artikel
BenutzerIn
[default_avatar]
Hallo,

was repräsetieren denn deine 50 Oberflächen?

Grüße,
#Kein Kommentar
 2007-06-25 19:58
#46529 #46529
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
bei größeren programmen würde ich objektorientiert schreiben. versuche deine sub's so gut es geht
zu abstraktieren, sodass du sie in modulen oder klassen speichern kannst und wieder verwenden kannst.
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Strat
 2007-06-25 20:59
#46530 #46530
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Meine (etwas groesseren) Tk-Programme haben meist die folgenden Module:

1. MyApp::Widgets: enthaelt Wrapper-Code zu den einzelnen Widgets, die schon Standardoptionen enthalten, z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub Button {
my( $parent, $text, $command, %options ) = @_;

ref $text
? $options{-textvariable} = $text
: $options{-text} = $text;

ref $command
? $options{-command} = $command
: $options{-background} = '#ff0000';

return $parent->Button(
-background => '#ffdd00',
-font => $MyApp::Config::DefaultFont,
...
%options,
);
}


2. MyApp::Config: hier steht die ganze Konfiguration oder dieses Modul dient als Interface zur Konfiguration

3. MyApp::GUI: hier ist der ganze GUI-Code drinnen

4. MyApp::Callbacks: hier steht der code drinnen, der z.B. auf click auf button.

Dann noch eventuell weitere, die Schnittstellen zu anderen Systemen enthalten, z.B. MyApp::LDAP, MyAPP::DBI usw...

und ein kleines Hauptprogramm
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2007-07-04 10:40
#46531 #46531
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Für Standardoptionen kann man auch die Options-DB verwenden:
Code: (dl )
1
2
3
4
$mw->optionAdd("*Balloon.background", '#C0C080', 'startupFile'); # für allgemeine Widgets
# für Widgets, die einen bestimmten Namen haben, mit Name => ... angegeben
$mw->optionAdd("*search*foreground" => 'yellow4');
$mw->optionAdd("*search*text" => "Suchen");
<< >> 5 Einträge, 1 Seite



View all threads created 2007-06-25 00:25.