4

我正在看这个:

public interface IAjaxCallbackEventHandler : ICallbackEventHandler
    {
        string CallbackResponse { get; set; } 
    }
}

所以页面实现了这个接口,最终看起来像这样:

public partial class XPage : Page, IAjaxCallbackEventHandler {
    // public because it's an interface, but really an implementation detail ;-(
    public string CallbackResponse { get; set; }

    // implementing underlying ICallbackEventHandler interface
    public void RaiseCallbackEvent(string eventArgument)
    {
        try
        {
            CallbackResponse = SomeOperation(eventArgument);
        }
        catch (Exception ex)
        {
            CallbackResponse = ex.ToString();
        }
    }

    // implementing underlying ICallbackEventHandler interface
    public string GetCallbackResult()
    {
        return CallbackResponse;
    }

}

据我所知,这个接口只是确保程序员必须考虑存储来自 to 的响应,RaiseCallbackEvent然后从调用 to 中返回GetCallbackResult

我看不出这种技术有什么真正的好处,因为你已经必须实现并考虑两种方法来做到这一点。

您的想法 - 这种方法有什么有效的好处,还是只是代码味道?

4

1 回答 1

2

接口应该只定义合同,不应该依赖于暗示代码应该如何实现,而不是满足合同的要求。

如果您想暗示某些代码路径,那么您最好拥有一个实现接口并从该接口继承的基类,就像使用基类一样,您确实可以在一定程度上控制代码流,同时仍然提供要覆盖的自定义逻辑位的入口点。

于 2011-05-09T22:06:35.983 回答