World of Warcraft や Everquest のようなキャラクターを作成できるアプリケーションがあるとします。MVC を使用することにしました。
ユーザーがアプリケーションにログインした後、ホームページからキャラクターのリストをユーザーに表示する必要があります。当初、ユーザーにキャラクターのリストを表示する唯一のビジネス要件は、ユーザー アカウントに関連付けられているすべてのアクティブなキャラクターのリストを取得することでした。このキャラクターのリストは、複数のコントローラーからもアクセスできる必要があります。
ある時点で、ビジネス モデルが変更され、ユーザーの支払い状況に基づいて特定の文字のみをユーザーが表示できるように、支払い状況が設定されます。たとえば、ゴールド レベルの支払いステータスではすべてのキャラクターにアクセスでき、シルバー レベルでは 2 種類のキャラクターに制限されます。
<?php
class Controller{
public function index(){
//array of users active characters(would be done via lookups with datamapper pattern)
$arrCharacters = array(0=>$objChar1, 1=>$objChar2);
//set a payment status of silver(would be done via lookups with datamapper pattern)
$objPayment = new objPayment();
$objPayment->setStatus('Silver');
//loop through each character object and check the character access level against what the user paid for
//if the character access level is not at least equal to the payment level, remove the character object from the
//array that we want to pass to the output(view)
foreach($arrCharacters as $key=>$objCharacter){
if($objCharacter->getCharAccessLevel()<=$objPaymentLevel()){
unset($arrCharacters[$key]);
}
}
}
}
?>
明らかにこのアプローチは機能しますが、ユーザーのキャラクターにアクセスするために必要なすべてのコントローラーにその機能をコピーする必要があることを意味します。この問題を解決するためのより効率的な方法に関する提案。自分の場合に適した良いデザイン パターンが見つかりません。
助言がありますか?