Sen*_*ful 27 language-agnostic oop design-patterns naming-conventions
我经常发现自己创建使用这种形式的类(A):
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
}
}
Run Code Online (Sandbox Code Playgroud)
而不是这种形式(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
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,关于表单A的好处是,每次实现子类时,您都不需要记住包含初始化和终结逻辑.这比形式B更不容易出错.
命名这些方法的标准惯例是什么?
我喜欢命名公共方法,Walk
从那以后我可以调用Dog.Walk()
哪个看起来比类似的更好Dog.WalkExternal()
.但是,我不喜欢我为受保护方法添加后缀"Internal"的解决方案.我正在寻找一个更标准化的名字.
顺便问一下,这个设计模式有名字吗?
我更喜欢用后缀来命名我的虚拟或抽象方法Core
,以表明该方法应该包含执行某些操作的核心逻辑.
所有参数检查并引发我在方法中执行的可能事件,这些事件调用Core-Methods.
abstract class Animal {
public void Walk() {
// TODO: do something before walking
// possible Argument checks and event raising
// custom logic implemented by each subclass
WalkCore();
// TODO: do something after walking
}
protected abstract void WalkCore();
}
class Dog : Animal {
protected override void WalkCore() {
// TODO: walk with 4 legs
}
}
class Bird : Animal {
protected override void WalkCore() {
// TODO: walk with 2 legs
}
}
Run Code Online (Sandbox Code Playgroud)
我认为没有正式的命名准则,这取决于你.但它应该与您定义的所有类和虚拟/抽象方法保持一致.
如果您遵循模板方法并希望提供可扩展性点,则"框架设计指南"建议使用Core后缀.