¿Es una práctica razonable extender una clase solo para reutilizar una sola función?

10

Estoy desarrollando una gama de filtros de publicación para un sitio de WordPress, y he creado los primeros 4 con una sola clase.

Los dos últimos tienen un alcance lo suficientemente diferente como para compartir una sola función (la función para producir los enlaces finales) en sus clases.

¿Es razonable, ya sea en este caso o en cualquier número de casos hipotéticos similares, extender la clase original para tener esa funcionalidad, o hay una mejor manera?

Fuzz suave
fuente
No entiendo esta pregunta. ¿Qué quieres decir con construir cosas con una clase? ¿Son estas clases las que heredan de algo? ¿La clase en la parte superior de la jerarquía ya no tendría la función común?
David Thornley

Respuestas:

19

No, si las dos clases son tan diferentes que solo comparten una función, lo más probable es que no sean intercambiables y, por lo tanto, romperían el principio de subesición de Liskov .

Solo se deriva de una clase base si es lógico hacerlo. Compartir una sola pieza de código rara vez es una justificación para la herencia :)

En este ejemplo en particular, parece que desea reutilizar esa función a través de la composición ...

MattDavey
fuente
3
¡Prefiere la composición sobre la herencia! En la mayoría de los casos, esto te hará la vida más simple a largo plazo.
Travis
Composición FTW!
back2dos
Vale la pena señalar que mi respuesta es básicamente la misma que @Sardathrion, acabo de vincularme con los principios relevantes :)
MattDavey
7

Si una descripción de clase contiene la palabra " y ", debe dividirse en dos (o más) clases. Por lo que parece, podría hacer que esa función sea miembro de otra clase a la que hacen referencia las que tiene actualmente.

Sardathrion - contra el abuso SE
fuente