我编码了一个框架(在Java中,但问题是,通用)中,我将提供一组接口,为客户实现。在框架的功能要依赖于实现类将如何constructued,即,大公依赖于这些实施方式,以提供的接口的其他实例。

例如我可能有:

Interface IContribution {
   public IMyStuff getMyStuff();
   public IHelper getHelper();
}

Interface IMyStuff {
     public void doSomeMethod(IHelper helper);
}

我怎样才能确保IMyStuff和IHelper这些实例可用?

的一种方法是创建在界面和在我的框架中的“吸气剂”的方法精心检查空物体返回。

另一种选择是创建用于实现一个工厂,调用(使用策略模式)要实现的接口方法的抽象类。但是,这违背了,我在首位的接口的事实。那么客户应该使用抽象类。但是他们可以通过使用接口而不是抽象类规避这一点。因此我不应该提供的接口,但只有抽象类...

那么,什么是你对这个想法,什么是务实的态度呢?

有帮助吗?

解决方案

  

我怎样才能确保IMyStuff和IHelper这些实例可用?

如果客户端是负责执行的接口和类本身,我会说这是他们的责任,以确保这些实例可用 - 我不会把它在我自己的代码关心自己

其他提示

为了建立一个良好的框架,您需要同时在周围建造一个应用程序。这样,你就知道和理解的痛苦你的客户会忍受之前,它是对他们蒙骗。

在换句话说,开始:如何将我的客户使用这个应用程序的工作?如何做,他们需要与它合作?

您会立即认识到最简单的方式,从他们的角度来看,将是最好的。

您不能接口确保单打独斗,没有行为存在。

我同意在框架防御式编程的哲学,帮助开发者避免犯错误。

可以提供一个工厂对象:

public class MyPoliceman {
    public IContribution makeContributor( IMyStuff stuffer, IHelper helper)
                    throws BadAssociatesException {

     // check validity of stuffer and helper here, throw exceptions if null
    }
}

然后至少我们可以检查空值等

随着一些人认为它通常是可能给开发商的帮助。在某些情况下,你能做的最好的就是捕获错误和craefully举报。例如在这里,一个完全正常的IHelper可以传递给你的工厂,但后来的集体诉讼可能使其无法。 (例如图像,这是一个文件,并且副作用后关闭该文件。)然后,所有你能做的就是陷阱所产生的误差条件下,地方记录一个错误,(可能)抛出异常。然后至少在显影剂具有关于什么修复线索。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top