如何避免编写空模板模式钩子方法
本文关键字:模式 子方法 何避免 | 更新日期: 2023-09-27 18:10:26
我试图用'钩子'应用模板模式,这是由一个默认为false的虚拟方法的布尔值'true'激活的。所以我的实现类可以重写这个来激活钩子。然而,钩子中的功能必须是虚拟的,因为不是所有实现类都需要实现它。下面的实现对我来说并不美观——是否有更好的方法来避免默认的异常抛出?
// template pattern applied in this function
public virtual Tobject CompileEntityFromDocument<Tobject>(document document)
{
Tobject dummyObject = CreateEntity();
SetAttributesForEntity(dummyObject, null, null);
if (MustSetRelationsForEntity())
{
SetRelationsForEntity(dummyObject, null);
}
return (Tobject)dummyObject;
}
public abstract void SetAttributesForEntity(object entity, document mainDocumentToCompileFrom, List<vfield> documentFieldRecords);
public abstract Tobject CreateEntity<Tobject>();
public virtual void SetRelationsForEntity<Tobject>(Tobject entity, List<vfield> documentFieldRecords)
{
throw new NotImplementedException("This must be overridden in implementing classes");
}
public virtual bool MustSetRelationsForEntity()
{
return false;
}
为什么不简单地在基类中保留它为空,并在必须设置关系时让派生类重写呢?
:
// template pattern applied in this function
public virtual Tobject CompileEntityFromDocument<Tobject>(document document)
{
Tobject dummyObject = CreateEntity();
SetAttributesForEntity(dummyObject, null, null);
SetRelationsForEntity(dummyObject, null);
return (Tobject)dummyObject;
}
public abstract void SetAttributesForEntity(object entity, document mainDocumentToCompileFrom, List<vfield> documentFieldRecords);
public abstract Tobject CreateEntity<Tobject>();
public virtual void SetRelationsForEntity<Tobject>(Tobject entity, List<vfield> documentFieldRecords)
{
//Do nothing in base
}