Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    logica di business in una applicazione ad oggetti

    domanda, in una applicazione strutturata ad oggetti, come avviene la separazione in livelli del software?

    interfaccia
    ----------
    logica di business
    ----------
    database


    io di solito uso questo sistema:

    supponiamo di avere una classe contatto

    Codice PHP:
    <?
    class Contatto(){

        var 
    $db;
        var 
    $gestore;
        var 
    $tabella_db;

        function 
    Contatto($db){
            
    $this->db=$db;
            
    $this->gestore="manage_contatti.php";
            
    $this->tabella_db="contatti";
        }

        function 
    Menu{
        
    ?>
        [*][url="<?echo $this->gestore?>"]Aggiungi[/url]
        <?
        
    }

        function 
    Add(){
        
    ?>
        <form action="<?echo $this->gestore?>" method="post">
        

    nome:<input name="nome" type="text"></p>
        

    cognome:<input name="nome" type="text"></p>
        <input type="hidden" name="operazione" value="add">
        

    <input value="salva" type="submit"></p>
        </form>
        <?
        
    }

        function 
    Add_db($nome,$cognome){
            
    $query="insert into $this->tabella_db (nome,cognome) values ('$nome','$cognome')";
            
    $db->do_query($query);
        }
    }
    ?>
    che è gestita dal file manage_contatto.php
    Codice PHP:
    <?
    include "contatto.php";
    include 
    "database.php";

    $db=new Database("host","user","password","database");

    $contatto=new Contatto($db);

    $contatto->Menu();

    switch(
    $_GET["operazione"]){

    case 
    "add":$contatto->Add();break;
    default:;
    }

    if(
    $_GET["operazione"]=="add"){

        
    $nome    =$_POST["nome"];
        
    $cognome    =$_POST["cognome"];

        
    $controlli=true;

        if(
    strlen($nome)<=0){
            
    errore("nome obbligatorio");
            
    $controlli=false;
        }

        if(
    strlen($cognome)<=0){
            
    errore("cognome obbligatorio");
            
    $controlli=false;
        }

        if(
    $controlli){
            
    $contatto->Add_db($nome,$cognome);
        }
    }
    ?>

    vi sembra che sia valido come sistema per separare la logica di business dal codice?

    come si potrebbe fare per separare ulteriormente la struttura, tenendo da parte la grafica?
    in pratica, dove potrei spostare il metodo Add() ?

    in pratica il file manage_contatti.php si occupa di fare tutti i controlli e di chiamare i vari metodi a seconda dei parametri get o post che riceve

    PS: date per scontato alcune funzioni e la classe database che non ho riportato...
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  2. #2
    Io sono dell'opinione che una classe debba gestirdati. Ciò vuol dire che come questi dati vengono passati non è compito della classe. Che i dati provengano da un form, da un url, da una query ad un db o da altro non deve interessare ala classe. Ciò vuol dire che non trovo corretto inserire all'interno di una classe un metodo che stampi un form. Al massimo puoi creare un'altra casse che lo faccia (quindi stampi gli input, le textarea ecc.).

    Di conseguenza la risposta ala tua domanda è affermativa, devi spostare il metodo add().

    Personalmente uso un template engine per gestire tutta la grafica e ciò che ne deriva (form, tabele, immagini, ecc.) e trovo che sia un ttimo metodo per separare i cntenuti dall'impaginazione anche se forse un po' più lento ma se si usa un motore come sarty che compila il codice alla fine ci si ritrova con il avro semplificato. Io ti consiglio di dargli uno sguardo, basta che cerchi smarty su google! Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    il problema è, come fai quando devi costruire un form decisamente più complicato, con select, radio button, checkbox e campi i cui valori dipendono in modo dinamico dalle proprietà dell'oggetto su cui stai lavorando?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  4. #4
    Hanno pensato anche a questo! Leggi la guida e ti renderai conto della potenza di questo strumento!

    Non fa altro che trasformare il codice di smarty in codice html con for, foreach, if e tutto il resto!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  5. #5
    ok, infatti l'ho notato nei file .tpl...ma scusami, capisco che foreach,for e if possano risultare più "comprensibili" di mysql_fetch_array o roba simile, ma non si rischia poi di avere a che fare con 2 linguaggi?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  6. #6
    In che senso?
    Che c'entra mysql!
    Il template è staccato dal php! Sono due cose diverse!
    Alla fine tu hai a che fare con due linguaggi diversi solo che sono molto simili tra loro!

    Al template tu passi solo i dati da fomrttare!
    Ti faccio un esempio:
    se estrai i nomi dei componenti di qualcosa dal db e vuoi metterli in una tabella procedi in questo modo:

    1) Estrai i nomi
    2) Li ordini come vuoi, elimini gli spazi (ma questo puoi farlo anche con smarty!)
    3) Passi i dati a smarty

    5) In smarty avrai una funzione che ti permette di formattare i dati in una tabella
    6) Il template engine legge quallo che hai scritto e lo trasforma in php.

    Altri template engine, invece, non compilano i template e quidndi gli setti vengono letti ed elaborati ogni volta. Proprio in questo sta la maggiore velocità di smarty rispetto ad altri template engine!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.