我有一个扩展 Pimple\Container 的自定义类。在我看来,这个想法是包装用于访问已定义服务的丑陋方法(见下文):
offsetGet($key) -> get($key)
offsetSet($key, $val) -> set($key, $val)
offsetExists($key) -> has($key)
这个想法很适合我想做的事情。然后我继续创建一个应用程序类,我选择继承而不是聚合不是出于任何特定原因,而不是看起来是逻辑。
现在的问题是当我有一个接受应用程序实例而不是 Pimple\Container 的 ServiceProvider 时,因为我创建了自己的定义此合同的 ServiceProviderInterface。
我现在意识到假设 Application 曾经并且仍然是一种 Container 并让它使用与父类不同类型的合同并不是一个好主意。但是,在我看来,从概念上讲,应用程序实例是某种容器,因为在其中我存储了一些键 => 值对数据。
我在想接口隔离原则会节省我的时间,但我不确定。
我对应用程序扩展 Pimple\Container 关系的假设是否违反了 Liskorv 替换原则?
有什么办法可以使用我自己的接口来注册我的服务提供者,因为我通过的任何服务都不符合 pimple\ServiceProvider 合同的错误?
简而言之,是否可以扩展 Pimple 的容器并忽略图书馆的服务提供者并使用定义相同合同但参数不同的您?