让我们说我们有一个班级" Car"比不同的数据(制造商,型号,颜色,制造日期,注册日期等)。该类没有获取数据的方法,但它知道来自另一个对象(通过构造函数发送,让它用于简短的DS).-并且在需要更新更改时也是如此。
方法getColor()将像这样实现
if(! this->loaded('color')){
this->askDS('color') // this will do the necesarry work to generate a request to DS
}
return this->information('color');
到目前为止,没有什么太花哨的了。如果它有一个名称,或者如果有库/框架已经这样做了,那么我想找出它。
DS有一个基于需要数据的类以dinamically方式注册的方法列表。对于汽车我们有:
现在,DS或任何方法都没有使用命令的有序列表从序列号开始并返回蓝色,但如果可以构造一组方法,从一组数据,它可以按顺序运行它们并获得所需的数据。
对于上面的示例,DS按此顺序运行1,2,3,并将所有方法产生的数据注入需要它的类对象中。
现在,如果汽车需要注册信息,我们有方法(4)从警察数据库获取api请求。
所以,给定: - 一种模型(类/对象) - 获取固定输入列表(对象属性)并提供固定输出列表(对象属性)的方法列表 - 一个类DS,可以粘合方法并运行所需的模型,从属性A(串行)到适当的B(人类可读的颜色),而模型或DS没有预先配置的方式来获取此数据,但发现它需要的。
这有名字还是已在某处实现?
我已经实现了一个非常基本的原型,它的工作非常好,我觉得这个实现方法有很多有用的功能:
如果您有一组执行sql查询的方法,然后您的应用切换到使用api,您只需要更改方法,而不必触及应用程序的任何其他部分< / p>
在寻找解决“需要”的方法链时。对象有,你可以找到一个方法链,运行它,如果它失败继续根据当前可用的数据寻找另一个方法列表 - 所以如果你有一个数据源的多个源,它可以尝试多个版本
从上面的段落开始,我可以从一个只有sql查询进行数据检索的应用程序开始 - 当我发现应用程序的一部分重载sql服务器时,我可以添加一个方法来从缓存中检索数据比数据库(或多层缓存,每个都有不同的成本)的成本更低
我可能会以与缓存相同的方式在混合中添加业务logi,并根据用户位置/选项提供不同的数据
这需要更少的编码,并将数据源与对象分离,使每个部分更容易模拟/测试
快速实现这一目标所需要的是一个针对已发现方法链的缓存解决方案,因为每个模型类型匹配数十万种方法会非常耗时但我不认为这很难要做的事 - 只需将所有找到的链存储在内存中,并找到一些元数据就可以从任何时间点恢复搜索 - 当您更新方法时,只需清除缓存,对第一个请求执行性能影响< / p>
感谢您的时间
答案 0 :(得分:1)
您所描述的内容听起来像是Dependency Injection的迂回方式。引用:
&#34;将服务传递给客户端,而不是允许客户端 建立或找到服务,是基本要求 。模式&#34;
根据您使用的语言,应该有几个依赖注入框架/库。