frecuencia me encuentro creación de clases que utilizan esta forma (A):convención de nombres para los métodos no virtuales y abstractas
abstract class Animal {
public void Walk() {
// TODO: do something before walking
// custom logic implemented by each subclass
WalkInternal();
// TODO: do something after walking
}
protected abstract void WalkInternal();
}
class Dog : Animal {
protected override void WalkInternal() {
// TODO: walk with 4 legs
}
}
class Bird : Animal {
protected override void WalkInternal() {
// TODO: walk with 2 legs
}
}
En lugar de esta forma (B):
abstract class Animal {
public abstract void Walk();
}
class Dog : Animal {
public override void Walk() {
// TODO: do something before walking
// custom logic implemented by each subclass
// TODO: walk with 4 legs
// TODO: do something after walking
}
}
class Bird : Animal {
public override void Walk() {
// TODO: do something before walking
// custom logic implemented by each subclass
// TODO: walk with 2 legs
// TODO: do something after walking
}
}
Como Puede ver, lo bueno del formulario A es que cada vez que implementa una subclase, no necesita recordar incluir la lógica de inicialización y finalización. Esto es mucho menos propenso a errores que el formulario B.
¿Qué es una convención estándar para nombrar estos métodos?
Me gusta nombrar el método público Walk
desde entonces puedo llamar al Dog.Walk()
que se ve mejor que algo así como Dog.WalkExternal()
. Sin embargo, no me gusta la solución de agregar el sufijo "Interno" para el método protegido. Estoy buscando un nombre más estandarizado.
Btw, ¿hay algún nombre para este diseño?
Buena pregunta; Yo hago esto todo el tiempo, también. –
@Robert: ¿qué has estado llamando los métodos internos? – Senseful
Impl como en WalkImpl .... No mejor que Internal. –