PHP如何解决多个平台相同代码的管理

路边拾草人 发布于 2015/10/19 20:05
阅读 281
收藏 0
PHP

现在开发遇到一个很纠结的问题:

公司商城开发了3个版本,pc、wap、app,来的时候3个平台都分别写了一套前台系统(当然其中有很多代码是重复)然后分别部署到不同的服务器上,这样就导致很多代码的冗余。现在想把其中相同的模块能够提取出来放到统一的模块中。

我能想到的解决办法是:

1:在每套系统中都建一个相同类包,然后需要的时候调取使用?

2:还是通过接口的形式调取数据然后处理?

想请遇到此类情况的朋友给我解惑!

加载中
0
封心
封心
共用一个数据层呗
0
聽雨人
聽雨人
这里面有两个东西,一个是类库的共用,一个是业务逻辑的共用。

类库的共用可以有三个选择:
1. PHP的依赖管理工具来管理共用的类库,例如 Composer

2. 所有app同在一个框架下,通过框架来管理类库代码,这个主流框架一般都支持
3. 通过git的subModule来管理依赖,这个我没试过,只是知道git有此功能

业务的共用,其实你说的两个方法都无所谓,主要是提出业务层,所有app通过业务层调用业务逻辑。至于业务层在哪里?本地还是远程,这个可以是透明的。当然留有拓展,不直接new一个业务类是可以有的。

<?php
# 业务使用
$userBusiness = UserBusiness::create();
$userBusiness->addUser(); 

# 业务类
class UserBusiness {
    /** @return self **/
    public static function create(){
        return new BusinessProxy('user');
    }
}

# 代理类
class BusinessProxy{
  private $isRemote; // 是否远程
  private $business; //实际业务类
  public function __construct($businessName) {
      if ($businessName in $remoteBusinessList) { # 伪代码哈
           $this->isRemote = true;
      }
      $this->business = new $businessName();
  }
  public function __call($methodName,$params){
      if ($this->isRemote) {
           curl 请求指定的url,例如 user.xxx.com/addUser,$this->business::class 可以获取类名
      } else {
      }
  }
}

# 统一业务控制类
class ControllerBase{
    public function allAction(){
        $module = $this->request->param('m');
        $action = $this->request->param('a');
        $params = json_decode($this->request->param('p'),true);
        $result = call_user_func_array([$this->getBusiness($module),$action],$params);
        exit(json_encode($result));
    }
}




路边拾草人
路边拾草人
太感谢你的指导,试试你的方法。
0
轻斜
轻斜

├── app-pc
│   ├── Biz
│   └── Controller
├── app-wap
│   ├── Biz
│   └── Controller
└── core-service
    └── Service

返回顶部
顶部