sql >> データベース >  >> RDS >> Mysql

クラスを拡張することは良い習慣ですか?

    簡単な経験則:クラスがextendsの場合 別の場合、そのクラスは その親クラス(わずかに変更または拡張されただけ)。親クラスの代わりにこの子クラスを渡すことができます。例:

    class Foo { }
    
    class Bar extends Foo { }
    
    function baz(Foo $foo) { }
    
    baz(new Bar);
    

    これは機能します、baz() Fooが必要です Barも受け入れます 、Bar Foo

    さて、 あなたのUsers Database ?いいえ。ユーザーはデータベースではありません。ユーザーは使用します データベース。ある場合は、構成を使用する必要があります :

    class User {
    
        protected $database;
    
        public function __construct(Database $database) {
            $this->database = $database;
        }
    
    }
    

    クラスは その責任は何ですか 。ユーザー管理クラスの責任は、ユーザーデータを管理することです。その一部にはデータベースとの通信が含まれる場合がありますが、それはユーザー管理クラスがであるという意味ではありません。 データベース。 User extends Database 、つまり、Databaseのすべてを実行できるということです。 クラスでできること(およびそれ以上)。つまり、Userを使用できるということです どこでもクラスではなく Database クラス、そしてそれは意味がありません。責任を分離してください。

    さて、それが正しい構造であるかどうかはまだ議論の余地がありますが、それは正しい方向に進んでいます。しかし、あなたは本当にUserが欲しいかもしれません クラス。1人のユーザーを表します 。次に、UserManagerがあります またはUserORM またはUserStorage または、Userの取得と保存に関係するもの データベース内のオブジェクト。このクラスは順番に使用します Database まさにそれをするために。これにより、責任が明確になり、分離されます。 Users クラスはユーザーデータ、Databaseを表します クラスはデータベース、UserORM/Manager/whateverと対話します 真ん中で2人の間で交渉します。



    1. 行がPostgreSQLに存在するかどうかを最速でチェック

    2. ubuntuサーバー16.04のmysqlのデフォルトパスワード

    3. 1つの列の複数の結果行を1つに連結し、別の列でグループ化します

    4. OracleでUnixタイムスタンプを返す方法