Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Veliki projekti u perlu.

[es] :: Perl :: Veliki projekti u perlu.

[ Pregleda: 3814 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.verat.net



Profil

icon Veliki projekti u perlu.24.06.2004. u 07:33 - pre 240 meseci
Sve je bilo lepo dok sam ja pisao krace programe. Ali sada kada mi treba nesto malo vise ... Odlucio sam se za OOP pristup.

Konkretno treba da napravim "IS" koji ce da se stara oko primanja zahteva za proveru dostupnosti hotela.

Korisnik salje zahtev. U njemu pise za koje je hotele zainteresovan, koji period, koliko ljudi itd. Agencija onda salje pitanje svakom hotelu dali imaju slobodnih mesta tada (bilo bi lepo kada bi i hoteli bili u sistemu i oni to sami proveravali, ali posto hotela ima samo nekoliko stotina, mozda i vise ..).

Kada agencija dobije povratnu informaciju, ona salje ponudu korisniku, sa onim hotelima u kojima u datom periodu ima mesta i sa cenom. Ako je zainteresovan za neki od tih sastavlja se ugovor. A inace po Spanskom zakonu korisnik mora da potpise ugovor (papirni) i da ga posalje faksom (ili slicno, skenira ...) nazad, bezveze ali ...

Ja sam mislio sledece :

Objekti - Klase :

- Korisnik
- Hotel
- Zainterosovan (za sta su zainteresovani korisnici)
- Booking (za sta je potpisan ugovor)

I plan je da se svaka klasa brine oko citanja forme prilikom unosa nohiv ili menjanja starih podataka u bazi. Pretrage za svaki od njih ... i oupste o svemu.

Problem je oko te organizacije. Recimo evo sta sam dobio tim putem :
Code:

package Hotel;

sub new{
    my $data = {};
    return bless $data;
}

sub create_table {
    # Just send the DataBase Handle to this method and it will create
    # hotels table for you.
    
    my $something = shift;
    my $dbh = shift;
      my $tmp = <<SQL;

      my $tmp = <<SQL;
      CREATE TABLE hotels(
      id VARCHAR(15) NOT NULL PRIMARY KEY,
      name VARCHAR(25) NOT NULL,
      hp_german VARCHAR(75),
      hp_english VARCHAR(75),
      hp_spanish VARCHAR(75),
      address VARCHAR(50),
      zip VARCHAR(20),
      city VARCHAR(50),
      country VARCHAR(50),
      telephone VARCHAR(50),
      fax VARCHAR(50),
      email VARCHAR(75),
      person VARCHAR(25),
      language_en TINYINT,
      language_ge TINYINT,
      language_sp TINYINT,
      winter_address VARCHAR(50),
      winter_zip VARCHAR(20),
      winter_city VARCHAR(50),
      winter_country VARCHAR(50),
      winter_telephone VARCHAR(50),
      winter_fax VARCHAR(50),
      winter_email VARCHAR(75),
      winter_person VARCHAR(25),
      winter_language_en TINYINT,
      winter_language_ge TINYINT,
      winter_language_sp TINYINT,
      invoice_address VARCHAR(50),
      invoice_zip VARCHAR(20),
      invoice_city VARCHAR(50),
      invoice_country VARCHAR(50),
      invoice_telephone VARCHAR(50),
      invoice_fax VARCHAR(50),
      invoice_email VARCHAR(75),
      invoice_person VARCHAR(25),
      invoice_language_en TINYINT,
      invoice_language_ge TINYINT,
      invoice_language_sp TINYINT,
      opened_from DATE,
      opened_until DATE,
      company VARCHAR(50),
      company_web VARCHAR(50),
      location VARCHAR(15),
      category VARCHAR(25),
      stars TINYINT,
      route_english TEXT,
      route_german TEXT,
      route_spanish TEXT,
      percentage INT,
      tax VARCHAR(50),
      image1 VARCHAR(50),
      image2 VARCHAR(50))
SQL
    $dbh->do($tmp) || return $dbh->errstr;
    DB_disconnect($dbh);
    return 1;
}

sub delete_table {
    my $something = shift;
    my $dbh = shift;
    
    $dbh->do("DROP TABLE hotels") || return $dbh->errstr;
    DB_disconnect($dbh);
    return 1;
}

sub get_hotel_data {
        my $something = shift;
        my $dbh = shift;
    my $id = shift;
    
    my $sth = $dbh->prepare("SELECT id,name,hp_german,hp_english,hp_spanish,
    address,zip,city,country,telephone,fax,email,person,language_en,language_ge,
    language_sp,winter_address,winter_zip,winter_city,winter_country,
    winter_telephone,winter_fax,winter_email,winter_person,winter_language_en,
    winter_language_ge,winter_language_sp,invoice_address,invoice_zip,
    invoice_city,invoice_country,invoice_telephone,invoice_fax,invoice_email,
    invoice_person,invoice_language_en,invoice_language_ge,invoice_language_sp,
    opened_from,opened_until,company,company_web,location,category,stars,
    route_english,route_german,route_spanish,percentage,tax,image1,
    image2
    FROM hotels WHERE id=?") || return $dbh->errstr();
      my $responce = $sth->execute($id);

      my @rows = $sth->fetchrow_array();
      my $error_msg = $sth->errstr();

    if(@rows > 0){
        return @rows;
    } else{
        return 0,$error_msg;
    }
}

sub DB_add_hotel{

    # i think it would be better idea to get the
    my $something = shift;
    my $dbh = shift;
    
    my ($id,$name,$hp_german,$hp_english,$hp_spanish,$address,$zip,$city,
    $country,$telephone,$fax,$email,$person,$language_en,$language_ge,
    $language_sp,$winter_address,$winter_zip,$winter_city,$winter_country,
    $winter_telephone,$winter_fax,$winter_email,$winter_person,
    $winter_language_en,$winter_language_ge,$winter_language_sp,$invoice_address,
    $invoice_zip,$invoice_city,$invoice_country,$invoice_telephone,$invoice_fax,
    $invoice_email,$invoice_person,$invoice_language_en,$invoice_language_ge,
    $invoice_language_sp,$opened_from,$opened_until,$company,$company_web,
    $location,$category,$stars,$route_english,$route_german,$route_spanish,
        $percentage,$tax,$image1,$image2) = @_;

      # at some point it would be wise to change this to ?,?,?
    # and execute($....,$...) form !
    
      my $tmp = <<SQL;
    INSERT INTO hotels (id,name,hp_german,hp_english,hp_spanish,address,zip,
    city,country,telephone,fax,email,person,language_en,language_ge,language_sp,
    winter_address,winter_zip,winter_city,winter_country,winter_telephone,
    winter_fax,winter_email,winter_person,winter_language_en,winter_language_ge,
    winter_language_sp,invoice_address,invoice_zip,invoice_city,invoice_country,
    invoice_telephone,invoice_fax,invoice_email,invoice_person,invoice_language_en,
        invoice_language_ge,invoice_language_sp,opened_from,opened_until,company,
    company_web,location,category,stars,route_english,route_german,route_spanish,
    percentage,tax,image1,image2)

    VALUES('$id','$name','$hp_german','$hp_english','$hp_spanish','$address',
    '$zip','$city','$country','$telephone','$fax','$email','$person',
    '$language_en','$language_ge','$language_sp','$winter_address','$winter_zip',
        '$winter_city','$winter_country','$winter_telephone','$winter_fax',
    '$winter_email','$winter_person','$winter_language_en','$winter_language_ge',
    '$winter_language_sp','$invoice_address','$invoice_zip','$invoice_city',
    '$invoice_country','$invoice_telephone','$invoice_fax','$invoice_email',
    '$invoice_person','$invoice_language_en','$invoice_language_ge',
    '$invoice_language_sp','$opened_from','$opened_until','$company',
    '$company_web','$location','$category','$stars','$route_english',
    '$route_german','$route_spanish','$percentage','$tax','$image1','$image2')
SQL

    $responce = $dbh->do($tmp);
      my $error = $dbh->errstr();
      if($responce != 0){
            return 1;
      } else {
            return 0,$error;
      }
}


1;


Slozicete se da to bas i nije najbolje resenje, jer ako treba da promenim nesto u korisniku ...

Ako neko zna za neki tutorijal, knjigu ili nesto sl. Koja govori o velikim projektima u perlu, neka kaze .... Takodje svaki vas primer koda, ili komentar na ovaj moj je dobrodosao ...

ps. Da znam da treba da koristim placeholder - ? u prepare pa da pozivam sa execute i posaljem promenljive a ne ovako ....
 
Odgovor na temu

bzero
dev null
europe

Član broj: 5907
Poruke: 371
195.178.54.*

Jabber: bzero@elitesecurity.org
Sajt: www.google.com/search?q=b..


Profil

icon Re: Veliki projekti u perlu.24.06.2004. u 10:10 - pre 240 meseci
Za OO pristup u Perlu pogledaj perltoot (Tom's object-oriented tutorial for perl):

~$ perldoc perltoot

ili na webu:

http://perlhelp.web.cern.ch/PerlHelp/lib/Pod/perltoot.html

Sto se tice koda koji si poslao, verovatno moze da bude i mnogo krace.
Npr, ako tvoj program treba da radi sa bazom, podrazumeva se da je baza sa potrebnim tabelama vec kreirana, pa ne vidim svrhu da uopste imas funkciju create_table (kao i delete_table), sto cini otprilike pola koda koji si poslao.
Dalje ako vec hoces da sa SELECT uzmes sve kolone iz neke tabele bolje da stavis :

SELECT * FROM hotels WHERE id=?

umesto da nabrajas sva polja, itd, itd...




Never trust an operating system you don't have sources for.
 
Odgovor na temu

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Re: Veliki projekti u perlu.24.06.2004. u 11:57 - pre 240 meseci
Pa dobro pola koda jeste na pravljenje table. Ali racunam da je to bitno da bude uz ostatak. Cisto kao referenca, da se sve ima ne jednom mestu.

U konacnoj verziji bih to verovatno obrisao ....

E sad oko price sa select * from ... to je ok kada ti trebaju svi podaci. Ali sta se desava kada ti trebaju samo neki podaci.

Recimo svi podaci mi trebaju kada trebam da procitam podatke za menjanje. Ali uglavnom mi trebaju samo neki podaci. Ok tu mogu da stavim samo ta polja.

Ali opet ostaje problem oko menjanja tabele. Recimo ovom dune da jos nesto doda. A to mi nece trebati za tamo nesto.

Nekako treba da napravim da mi on rezultat vrati u hash-u. Pa kad mi treba name da ja trazim $results{name} ili nesto slicno.

Tako se nebih cimao i ako bi trebalo da dodajem polja kasnije u tabelu. A mogao bih da ga zovem sa select * ...

Jer postoji neki nacin u msql-u da procitam koja polja (atribute) ima neka tabela. Kako bih napravio ovakav kod ?
 
Odgovor na temu

bzero
dev null
europe

Član broj: 5907
Poruke: 371
195.178.54.*

Jabber: bzero@elitesecurity.org
Sajt: www.google.com/search?q=b..


Profil

icon Re: Veliki projekti u perlu.24.06.2004. u 13:15 - pre 240 meseci
Code:

$query = "SELECT * FROM hotels";
$sth = $dbh->prepare($query);
$sth->execute;

while ($hash_ref = $sth->fetchrow_hashref)
{
    print $hash_ref->{'name'} . "\n";
}

$sth->finish;


Prouci malo DBI dokumentaciju:
http://search.cpan.org/~timb/DBI/DBI.pm#fetchrow_hashref

Never trust an operating system you don't have sources for.
 
Odgovor na temu

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Re: Veliki projekti u perlu.24.06.2004. u 15:40 - pre 240 meseci
Doup .... zasto jednostavno kad moze komplikovano :)

Naravno da nisam prvi kome je ta pogodnost pala na pamet. Ocigledno.
 
Odgovor na temu

zsteva

Član broj: 503
Poruke: 31
*.dialup.sezampro.yu.

ICQ: 26239191


Profil

icon Re: Veliki projekti u perlu.26.06.2004. u 18:57 - pre 240 meseci
ovakav pristup OOP databaze programiranju me uvek asocira na wraper oko wrappera oko....
extra shto u primeru nema nishta korisno, ovakav kod mozesh da dobijesh iz nekog generatora,
plus shto si i dalje zavistan o SQLu koji je direktno upisan u klasi.

slicne rezultate uz malo drugaciji pristup se dobijaju i otvara mnoge
mogucnosti. umesto generisanja ili pisanja koda punog databaze depending
sql-a, u samoj klasi napravish samo opis preslikavanja na tabelu.
naravno potreban je kod koji ce da radi sve potrebne stvari (ono shto je ovde kodirano),
ali u opshtem slucaju za definiciju iz klase.

iz definicije se na jednostavan nacin generishe kod za kreiranje,
selektovanje, pretrazivanje, update.... ali se dobija i estra stvar, shto u kodu imash sve informiacije
u podacima (tip,...) tako da mozesh na raznim mestima shodno tome da imash default nacin
formatiranja polja oderenjenog tipa....

ima da se nadje mnogo chlanaka i knjiga sa ovom tematikom, ali ono shto sam ja skontao,
a to je da svi oni mnogo mlate filozofiju, a nigde elegantan nacin kako to u praksi uraditi.
(priznajem da nisam trazio knjige sa patternima, gde verovatno ovo postoji razradnjeno)

video sam par implementacija ali ih nisam neshto mnogo koristio (mogu da potrazim po disku)...
 
Odgovor na temu

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Re: Veliki projekti u perlu.29.06.2004. u 17:42 - pre 240 meseci
@peraxl : Al' si ti promasio temu .... :)

@zsteva : Ajde potrazi po disku. Ili neki link. Ne znam sta da trazim uopste :)

Nego to je i meni palo na pamet ... Krenuo sam da radim klasu u perlu koja ce da
se koristi kao neki framework za pravljenje CGI aplikacija. I da preuzme posao oko onih "smarajucih" stvari koje se stalno ponavljaju. Kao sto su, citanje i validacija forme, upisivanje u bazu (add/update), citanje iz baze, ispis .... etc.

I otprilike je zamisao da se sve to svodi na pozivanje metoda za te operacije, a da se teziste stavi na ono sto stvarno treba da se programira. Dakle nesto sto treba aplikacija da izracuna, ili sl.

E i bas sam se mislio kako da odradim proveru podataka unesenih u formu.
Dakle definisace se u html da je maksimalna duzina x, da je ovo da je ono.
Ali treba proveriti dali je u polje za email stvarno unesen email. Ili recimo tamo gde treba broj da nije uneseno neko slovo i sl ...

A ovo tvoje "resenje" je prava stvar za to.

Nekako da smislim kako da se definisu pravila, tj parametri nekog objekta (ime parametra, tip, dozvoljene vrednosti), i na osnovu toga da generisem tabele i sl. A odmah cu imati i podatke potrebne za proveru validnosti unetih podataka.

Samo sto je to sada preveliki posao. Moram da zavrsim projekat brzo (reda velicine 2,3 nedelje). A projekat nema veze sa tim framework-om, ali bih ga uradio "u njemu".

A ove "advanced" opcije cu da dodam kasnije. Za sada, ti sam pravis svoju klasu u kojoj definises tabele i sl. A framework se brine oko ispisa (uz koriscenje templatea) i sl. stvari ...

 
Odgovor na temu

mire
Miroslav Madzarevic
Belgrade

Član broj: 252
Poruke: 145
*.dial.InfoSky.Net



Profil

icon Re: Veliki projekti u perlu.30.06.2004. u 08:26 - pre 240 meseci
jesi li ti cuo za amadeus ?
mire@zwer:~$ traceroute zivot.sloboda.potraga-za-srecom
 
Odgovor na temu

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Re: Veliki projekti u perlu.30.06.2004. u 15:40 - pre 240 meseci
Ne verujem .... mislim cuo sam za Amadeus ali Amadeus band ...
 
Odgovor na temu

mire
Miroslav Madzarevic
Belgrade

Član broj: 252
Poruke: 145
*.dial.InfoSky.Net



Profil

icon Re: Veliki projekti u perlu.14.07.2004. u 23:13 - pre 239 meseci
www.amadeus.com
mire@zwer:~$ traceroute zivot.sloboda.potraga-za-srecom
 
Odgovor na temu

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Re: Veliki projekti u perlu.16.07.2004. u 11:31 - pre 239 meseci
Amadeus.com ?!!? I ??

Sta da kupim od njih gotovo resenje ?
 
Odgovor na temu

[es] :: Perl :: Veliki projekti u perlu.

[ Pregleda: 3814 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.