3

問題

クラスユーザーがいるとします。このユーザー オブジェクトを他のユーザーに返して、getter を使用して情報を抽出できるようにする必要があります。ただし、内部情報はデータベース内の行に直接関連付ける必要があるため、内部状態を簡単に設定できるようにしたくはありません。拡張クラスだけが変数を設定できるように、ミューテーター (セッター) を保護することは理にかなっていますか? これは悪い習慣ですか、無関係ですか、やり過ぎですか、それとも役に立ちませんか?

私は __construct を 1 回の使用に限定しようと考えました (これはシングルトン パターンと呼ばれることがあると思いますが、完全に理解しているかどうかはわかりません)。

私はアマチュア プログラマーです。ありがとう。

例:

<?php

    class user
    {

    private username;

    protected function set_username($username)
    {
        $this->username = $username;
    }

    public function get_username()
    {
        return $this->username;
    }

?>
4

3 に答える 3

2

依存します。状態が変更されたときに特に何もする必要がない場合は、セッターを完全に除外できます。すべてのサブクラスは、保護または緩く設定されたプロパティに直接アクセスできます。

状態が変化したときに何かを実行する必要がある場合 (たとえば、状態が変化したときにデータベースの UPDATE を実行するなど)、データベース更新コードへの呼び出しがセッターに配置されるため、セッターを使用すると作業が大幅に楽になります。これは、常にセッターを通過する場合、オブジェクトの状態を変更すると DB が常に更新されることを意味します。

要するに、それは依存します。

于 2012-01-13T07:22:45.617 に答える
0

たとえば、IDを受け入れるコンストラクターがある場合、なぜセッターが必要なのですか。ゲッターがあるという理由だけで、オブジェクトのセッターを与えることを強制するルールはありません。ユースケースがどこかでオブジェクトを構築し、その後それを使用してデータを抽出するだけの場合は、セッターをまったく作成しないでください。

オブジェクトを拡張すると、保護されたクラス変数自体を操作できるため、セッターの形式も必要ありません。「外の世界」がクラスに何かを設定できるようにしたくない場合は、許可しないでください。

于 2012-01-13T07:23:35.647 に答える
0

あなたのコードはまったく問題なく、完全にカプセル化されています。Tt は疎結合もサポートしています。

使いやすくするために、必要な (必須の) すべてのメンバーをコンストラクターのパラメーターとして追加できます。

singleton パターンに関しては、注意して使用してください。一般的なユーザーはシングルトンではありません。パターンへのリファクタリング (Joshua Kerievsky) を参照してください。

于 2012-01-13T07:24:06.097 に答える