apakah ini merupakan praktik yang masuk akal untuk memperluas kelas hanya untuk menggunakan kembali satu fungsi?

10

Saya sedang mengembangkan berbagai filter posting untuk situs wordpress, dan saya telah membangun 4 filter pertama dengan satu kelas.

Dua yang terakhir cukup berbeda ruang lingkupnya untuk hanya berbagi fungsi tunggal (fungsi untuk menghasilkan tautan akhir) di kelas mereka.

Apakah masuk akal, baik dalam hal ini atau dalam sejumlah kasus hipotetis serupa, untuk memperluas kelas asli untuk memiliki fungsi itu, atau apakah ada cara yang lebih baik?

Fuzz ringan
sumber
Saya tidak mengerti pertanyaan ini. Apa yang Anda maksud dengan membangun sesuatu dengan kelas? Apakah kelas-kelas ini mewarisi sesuatu? Bukankah kelas di puncak hierarki sudah memiliki fungsi yang sama?
David Thornley

Jawaban:

19

Tidak, jika kedua kelas sangat berbeda sehingga mereka hanya berbagi satu fungsi, kemungkinannya mereka tidak dapat dipertukarkan - dan karena itu mereka akan melanggar prinsip substitusi liskov .

Hanya berasal dari kelas dasar jika logis untuk melakukannya. Berbagi sepotong kode jarang menjadi pembenaran untuk warisan :)

Dalam contoh khusus ini, sepertinya Anda ingin menggunakan kembali fungsi itu melalui komposisi ...

MattDavey
sumber
3
Lebih suka komposisi daripada warisan! Dalam kebanyakan kasus ini akan membuat Anda hidup lebih sederhana dalam jangka panjang.
Travis
Komposisi FTW!
back2dos
Patut dicatat jawaban saya pada dasarnya sama dengan @Sardathrion, saya baru saja terhubung dengan prinsip-prinsip relevan :)
MattDavey
7

Jika deskripsi kelas memiliki kata " dan " di dalamnya, itu harus dipecah menjadi dua (atau lebih) kelas. Dari hal-hal yang terlihat, Anda bisa menjadikan fungsi itu anggota kelas lain yang direferensikan oleh yang Anda miliki saat ini.

Sardathrion - menentang penyalahgunaan SE
sumber