开放封闭原则 php,php – ServiceLocator和开放/封闭原则

我想:

>使所有需要它们的类可以看到通常需要的服务,

>用最少的样板,和

>不牺牲可测试性!

在客户端类的构造函数中,我有这样的东西:

this->db = Locator::getDb();

this->log = Locator::getLogger();

然后,类’方法的其余部分通过这些成员属性访问服务,例如:

this->fooModel = new fooModel(this->db);

fooItem1234 = this->fooModel->findById(1234);

但是我也希望“模型”对象(如上面的fooModel)具有这种级别的可见性,因为它们可以从几个不同的位置访问,并且不需要有多个实例.

所以我最初的想法是将Locator扩展为:: getFooModel(),但现在看来我违反了开放/封闭原则,因为每次引入新的模型类时我都必须修改Locator.

为了满足OCP,我可以使用动态服务定位器(也在Fowler的页面上描述)但是由于与他相同的原因,我并没有完全出售,即它不够明确.

另一个解决方案就是让我所有模型的方法都是静态的.所以:

fooItem1234 = FooModel::findById(1234);

我喜欢这个,因为它是零样板.我可以创建一个新的模型类,并从任何地方开始用一行来调用它.但现在该模型依赖于Locator来找到它的数据库连接,我不确定我对此的看法.首先,如果我需要在不同的数据库连接上打开两个fooModel,那将是一团糟和/或不可能.也就是说,我实际上并不需要这样做,所以这个选项看起来有点诱人.

最后,还有DI.但就像我上面说的那样,我觉得这个小项目可能太过分了.

结论:我有点卡在这里,并希望得到StackOverflow大师的一些建议!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值