Salve in occasione della manutenzione della mia applicazione (un gioc) ho deciso di fare le cose per bene questa volta cercando di rispettare tutte le regole di buona programmazione. Ora dopo essermi letto una marea di guide sulla programmazione ad oggetti, mi è sorto un dubbio, ovvero come devo dividere il mio progetto perchè rispetti tutte le regole ? vado subito al concreto con un'esempio:
Ora il dubbio in concreto è chi si deve occupare del comprare l'arma/armatura ad esempio ? La classe utente o classe Arma ? In teoria le due cose dovrebbero essere staccate ovvero la classe utente dovrebbe occuparsi dell'utente (e magari di comprare l'oggetto) e la classe Arma di manipolare l'oggetto arma...ma come interegaiscono tra di loro le due classi in concreto? Passare per riferimento l'oggetto arma (magari inizializzato con l'id dell'arma da comprare) non mi sembra un buon modo di farle interagire in quanto rende dipendenti le due classi l'una dall'altra e a sto punto oltre tutto non solo Arma diventerebbe quasi inutile (in quanto terrebbe giusto una funzione che restituisce i dati dell'arma) ma poichè alla fine l'applicazione è basata solo sulle iterazioni che l'utente compie se applicassi il prinipio di sopra mi ritroverei ad avere solo funzioni nella classe Utente a questo punto.Codice PHP:
class Utente{
public function __construct($id)
//Funzioni Per manipolare la tabella Utente
public function getSoldi();
public function setSoldi($soldi);
//ecc.
}
abstract class Item{
public function __construct();
}
class Arma extends Item{
public function __construct($user); //Ipotesi 1 passo l'oggetto utente
public function getListaWeapon(); //Resituisce un array con le armi comprabili dall'utente
public function buyWeapon($id_arma); //Compra un'arma
public function getEquipedWeapon();//Restituisce l'arma equipaggiata dell'utente
public function hasBoughtWeapon($id_arma); //Restituisce true se l'utente ha comprato già l'arma
private function canBuyWeapon($id_arma); //restituisce true se può comprare l'arma
//ecc.
}
class Armatura extends Item {
//Come arma
}
Grazie in anticipo e scusate la lunghezza![]()