如何避免编写空模板模式钩子方法

本文关键字:模式 子方法 何避免 | 更新日期: 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
}