最近一直在纠结项目分层架构的问题其中最纠结的就是在项目中如何引入第三方类库比如说有个msg控制器要发送邮件classMsgConstrollerextendsConstroller{publicfunctionsend(){$email=newemail([options....]);$email->send();}}这个控制器通过引入一个email工具类实现了发送email的功能但是如果同时要发送短信呢classMsgConstrollerextendsConstroller{publicfunctionsend(){$email=newemail([options....]);$sms=newsms([options....]);$email->send();$sms->send();}}这样感觉很不优雅所以我想到了使用个服务层来解决classMsgConstrollerextendsConstroller{publicfunctionsend(){$msg=service('Msg');//实例化一个Msg服务类$msg->send('message,email,sms');//通过send接口传的参数会同时发送站内信、邮件、短信}}但是这样又会把new操作给转移到服务层感觉还不是怎么理想那么大家有什么比较简单优雅的解决方案吗?
2 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
sms和email等同时实现send()方法接口,再用Composite设计模式组合起来怎样?classMsgConstrollerextendsConstroller{publicfunctionsend(){$msg=newMsgComposite();$msg->add(newemail());$msg->add(newsms());$msg->send();}}new操作现在框架好像都喜欢用统一的ServiceLocator解决,方便统一替换利于单元测试
添加回答
举报
0/150
提交
取消