À l'aide d'un modèle de décorateur
Un motif décoratif consiste à envelopper un objet dans un autre objet, offrant ainsi une fonctionnalité améliorée. Il aborde la question de l'extensibilité sans modifier la classe d'origine. Voici un exemple :
class SecureContainer { protected $target; protected $acl; public function __construct( $target, $acl ) { $this->target = $target; $this->acl = $acl; } public function __call( $method, $arguments ) { if ( method_exists( $this->target, $method ) &&& $this->acl->isAllowed( get_class($this->target), $method ) ){ return call_user_func_array( array( $this->target, $method ), $arguments ); } } } $acl = new AccessControlList( $currentUser ); $controller = new SecureContainer( $controller, $acl ); $controller->actionIndex(); // Execute method with ACL checking
Cette approche :
Pour vérifier l'accès aux objets de domaine avec des propriétaires définis :
Option 1 (Loi de Déméter conscient) :
$this->acl->isAllowed( get_class($this->target), $method )
Option 2 (Demander des détails pertinents) :
$command = array( get_class($this->target), $method ); $this->acl->isAllowed( $this->target->getPermissions(), $command )
Considérez ces vidéos pour mieux comprendre :
Le modèle dans MVC n'est pas une classe. Il englobe une couche contenant :
Logique métier du domaine : Traite du calcul, de la vérification des conditions et de la mise en œuvre des règles métier.
Accès et stockage des données : Gère les opérations liées aux données, telles que l'interaction avec la base de données.
Services : Abstractions qui simplifient le code du contrôleur, jonglant souvent avec les objets de domaine, les composants et les mappeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!