ホームページ >バックエンド開発 >PHPチュートリアル >オブジェクト指向の分析と設計に関する疑問
オブジェクト指向の分析と設計に関する質問
皆さん、こんにちは。私はしばらくオブジェクト指向に触れてきましたが、新しいシステムを設計するたびに、オブジェクトをどのように分割して設計するかという問題に遭遇するので、ここで質問します。アドバイスを求めてください。
たとえば、現在のシステム要件には、ユーザー、ロール、ポイントが含まれます。
ユーザーにはユーザー名とパスワードがあります。
登場人物には次のものが含まれます: キャラクター名。
ポイントには、ポイント値、ポイントが属するユーザー、およびポイントが属するモジュールが含まれます。
オンライン投稿を読んで、次のように思います:
ユーザー オブジェクトには、ユーザー名、パスワード、ロール オブジェクト、ポイント オブジェクトが含まれている必要があります。
コード:
class User {
public $username ;
public $password;
public $role;
public $score;
}
これはそのように設計されているのでしょうか?しかし、私はいつも何かが間違っていると感じています。おそらく、ユーザーオブジェクトを取得する必要があるときに、ロールオブジェクトとポイントオブジェクトを使用していないのではないかと思います。ユーザーオブジェクトを取得して、ユーザーの対応するロールを取得します。この設計は合理的ですか?
------ソリューションのアイデア----------------------
最初の設計計画は間違っていません 何も間違っていません。これは死ぬほど書かれたものです
しかし、2 番目のオプションははるかに柔軟です
ユーザーをロールに渡すか、ロールをユーザーに渡すかについては、すべてデザイン モードの選択にかかっています
--- ---解決策のアイデア----------------------
作業のためにポイントを別のクラスに割り当てることができます。
ポイントカテゴリはポイントの追加、削除、変更のみを行い、他の会員情報を処理する必要はありません。たとえば、
<br />class score{<br /><br /> private $_oUser;<br /><br /> public function __construct($oUser){<br /> $this->_oUser = $oUser;<br /> }<br /><br /> public function add(){<br /><br /> }<br /><br /> public function update(){<br /><br /> }<br /><br />}<br />
<br /><?php<br />//用戶基類<br />class BaseUser{<br /> public $userName;<br /> public $password;<br /> <br /> function __construct($userName,$password){<br /> $this->userName = $userName;<br /> $this->password = $password;<br /> }<br />}<br /><br />//角色類<br />class Role{<br /> private $userName;<br /> public $roleName;<br /> <br /> function __construct($userName,$roleName){<br /> $this->userName = $userName;<br /> $this->roleName = $roleName;<br /> }<br /> <br /> function GetRoleUserName()<br /> {<br /> return $this->userName;<br /> }<br />}<br /><br />//積分類<br /><br />class Score{<br /> private $userName;<br /> private $module;<br /> public $score;<br /> <br /> function __construct($userName,$module,$score){<br /> $this->userName = $userName;<br /> $this->module = $module;<br /> $this->score = $score;<br /> }<br /> <br /> function GetScoreUserName()<br /> {<br /> return $this->userName;<br /> }<br /> <br /> function GetScoreModule()<br /> {<br /> return $this->module;<br /> }<br /><br /> <br />}<br /><br />//用戶類 繼承用戶基類<br />class User extends BaseUser{<br /> public $role;<br /> public $score;<br /> <br /> function __construct($userName,$password,$roleName,$score){<br /> parent::__construct($userName, $password);<br /> $this->role = new Role($userName,$roleName);<br /> $this->score = new Score($userName,"module",$score);<br /> }<br />}<br /><br />$user = new User("user9527","123","xiaoming",100);<br /><br />echo "userName: ".$user->userName;<br />echo "<br>";<br />echo "password: ".$user->password;<br />echo "<br>";<br />echo "roleName: ".$user->role->roleName;<br />echo "<br>";<br />echo "score: ".$user->score->score;<br />echo "<br>";<br /><br />/*<br />userName: user9527<br />password: 123<br />roleName: xiaoming<br />score: 100<br /> */<br /><br /><br /><br />//code end<br />