假设我有一个基础服务类,该类一旦被继承,将通过方法公开一堆服务。在运行每种方法之前,应执行访问检查,以查看运行中的用户是否有权使用该服务。 现在,我不想把这个留给派我班的人。
有没有办法让每个方法自动调用某个方法并根据所述方法返回的数据中止或分支? 我想使对实现子类的人尽可能透明。
谢谢。
答案 0 :(得分:0)
这实际上是模板方法设计模式的基本用例。
abstract class ServiceBase
{
public bool ServiceMethod()
{
if (!CheckMethod())
{
return false;
}
return ServiceMethodImpl();
}
protected abstract bool ServiceMethodImpl();
private bool CheckMethod()
{
// ...
}
}
您只允许派生类实现核心功能,但是在基类中进行所需的检查。
通过这种方式,派生类无法克服检查,也不必关心。
派生类将只需要实现核心功能:
class ServiceImpl : ServiceBase
{
protected override bool ServiceMethodImpl()
{
// ...
}
}
答案 1 :(得分:0)
如果我理解您的问题,则可以执行以下操作:
public /* abstract */ class ServiceBase
{
private void CheckAccess()
{
if ( DontHaveAccess )
throw new NoAccessException();
}
public void ActionToDo()
{
CheckAccess();
DoActionToDo();
}
protected virtual /* or abstract */ void DoActionToDo()
{
}
}