我目前正在开发一个基于组件的API,它具有很强的状态性。顶层组件每个实现大约12个接口。
因此,库存的顶级组件位于抽象实现堆栈的顶部,而抽象实现堆栈又包含多个混入实现并实现多个混入接口。
到目前为止,一切顺利(我希望如此)。
问题是基础功能的实现非常复杂(5层基类中有1000行代码),因此我不希望组件编写者自己实现接口,而是扩展我的基类(所有样板代码都已经写好了)。
因此,如果API接受接口,而不是我希望组件编写者扩展的对抽象实现的引用,那么我就有可能不会执行其他代码区域所要求和假定的验证。
因此,我的问题是,有时使用抽象实现引用而不是对其实现的接口的引用来参数化API方法是否有效?
您是否有使用此技术的设计良好的API的示例,或者我正在试图说服自己进行糟糕的实践?
发布于 2010-05-10 01:26:55
到目前为止,
还不错(我希望如此)。
不完全是。实现十几个接口不是一个好兆头。但是我不知道如何重构,或者有没有可能,因为我不知道代码。
因此,我的问题是,有时使用抽象实现引用而不是对其实现的接口的引用来参数化
方法是否有效?
很少,是的。例如(Java):
javax.faces.context.FacesContext是抽象的,但作为参数传递。javax.el.ELContext -同上。java.awt.Image -同上。<代码>H213<代码>F214但不管怎样,我会说不。将开发人员限制在实现上是不好的。他们可能想要提供一个不应该执行上述任何验证的mock,或者使用动态代理。
最后,如果你绝对确定你不能重构你的接口,你可以使用尽可能少的抽象类参数。
https://stackoverflow.com/questions/2798469
复制相似问题