作者chan15 (ChaN)
看板PHP
标题[讨论] Codeigniter 实现 DI 精神
时间Tue Aug 25 12:03:20 2015
大家好,我想要在 CI 实作 Dependency Injection 的理念,其实就是希望程式码处里可以分离
加新东西时不影响主要的 code,以金流当作范本,金流有很多付费方式
像是 WebAtm,Credit、Paypal,要达成程式抽离以及介面化设计目前我的布局如下
提出来希望可以跟各位交流看怎麽改进会比较好
application\controllers\Billing.php
<?php
class Billing extends CI_Controller
{
public function payment($payment = null, $method = null)
{
$this->load->library($payment);
$this->{$payment}->{$method}();
}
}
application\libraries\Credit.php
<?php
include APPPATH.'interfaces\'.BillingInterface.php;
class Credit implements BillingInterface
{
private $ci = null;
public function __construct() {
$this->ci =$ get_instance();
}
public function process()
{
}
}
application\interfacecs\BillingInterface.php
interface BillingInterface
{
public function process();
}
因为 CI 没有像 Laravel 的 autoload 以及 namespace use 设计,所以我把付费方式设计在 libraries 里面调用
因此只要有新的付费内容我只要透过 payment 去引用 library 即可
网址会变成
http://api.xxx.com/billing/payment/credit/do_something
这样的设计除了 post 以外,你没办法预测会带多少变数进来,所以如果需要 get 带参数妥协还是用
? 的方式,像是
http://api.xxx.com/billing/payment/credit/check?price=1000&id=A1234
我是觉得还 ok,希望大家可以给予意见修正,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.219.144.228
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1440475405.A.090.html
1F:→ dlikeayu: 写个model->load 规则只吃你想吃的参数就好,另外带csrf 08/27 00:08