Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah memperluas kelas merupakan praktik yang baik?

Aturan praktis sederhana:jika kelas extends lain, maka kelas itu adalah kelas induk itu (hanya sedikit diubah atau diperpanjang). Anda dapat melewati kelas anak ini alih-alih kelas induk. Contoh:

class Foo { }

class Bar extends Foo { }

function baz(Foo $foo) { }

baz(new Bar);

Ini berfungsi, baz() mengharapkan Foo tetapi juga menerima Bar , karena Bar adalah sebuah Foo .

Sekarang, adalah Users . Anda sebuah Database ? Tidak. Pengguna Anda bukan database. Pengguna Anda menggunakan sebuah database. Jika ada, Anda harus menggunakan komposisi :

class User {

    protected $database;

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

}

Sebuah kelas harus menjadi apa tanggung jawabnya apa . Tanggung jawab kelas manajemen pengguna adalah mengelola data pengguna. Bagian dari itu mungkin melibatkan berbicara dengan database, tetapi itu tidak berarti kelas manajemen pengguna adalah sebuah database. Jika User extends Database , itu berarti ia dapat melakukan segalanya Database kelas dapat melakukan (dan banyak lagi). Itu berarti Anda dapat menggunakan User kelas di mana saja bukan Database kelas, dan itu tidak masuk akal. Pisahkan tanggung jawab.

Sekarang, masih bisa diperdebatkan apakah itu struktur yang benar atau tidak, tetapi menuju ke arah yang benar. Tetapi Anda mungkin benar-benar ingin memiliki Users kelas, yang mewakili satu pengguna . Anda kemudian memiliki UserManager atau UserORM atau UserStorage atau apa pun, yang berkaitan dengan mengambil dan menyimpan User objek dalam database. Kelas ini pada gilirannya menggunakan sebuah Database untuk melakukan hal itu. Itu membuat tanggung jawab tetap jelas dan terpisah. Users kelas mewakili data pengguna, Database kelas berinteraksi dengan database, UserORM/Manager/whatever di tengah negosiasi antara keduanya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Dapatkan nama kolom atau alias dari kueri

  2. Bagaimana cara men-debug kesalahan yang tidak memiliki pesan kesalahan?

  3. MONGODB Mongoimport mungkin dipercepat?

  4. Berurusan dengan kunci utama duplikat pada penyisipan di SQLAlchemy (gaya deklaratif)

  5. Sintaks MySQL dalam membuat Kunci Asing