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...