PHP应用程序层

时间:2018-06-23 02:03:24

标签: php mysql repository n-tier-architecture 3-tier

我正在处理应用程序的设计层。到目前为止,基本上我是:

  • 业务要求
  • 体系结构:客户端-服务器
  • 技术:PHP + MySQL,HTML5,JS,第三方APIs

我的应用

  • 数据源:MySql数据库,第三方API
  • 数据层:与CRUD操作的接口,用于访问数据库的PDO,实现CRUD接口的类,与API进行通信的类
  • 存储库:具有用于访问数据源的业务方法的类和接口。
  • 业务对象:价值对象和业务规则
  • 应用层:控制数据层和演示文稿之间的流程。
  • 表示层:使用javascript和ajax和php代码进行html设计。与应用程序层交互以进行数据检索

实施

数据源

  • 1个MySQL数据库
  • 1x 3rd party api

数据层

interface DSOps
{
    /*
    * @return array
    */
    function read($sql);

    /*
    * @return array
    */
    function readAll($sql);

    /*
    * @return boolean
    */
    function save($sql);

    /*
    * @return boolean
    */
    function delete($sql);
}



use PDO;

class DSSql implements DSOps
{
    private $bd;

    public function __construct( PDO $bd)
    {
        $this->bd =  $bd;
    }

    public function read($sql)
    {        
        $stmt=$this->bd->prepare($sql);
        $stmt->execute();
        $response = $stmt->fetch(PDO::FETCH_ASSOC);        
        return $response;
    }

    public function readAll($sql)
    {
        $stmt=$this->bd->prepare($sql);
        $stmt->execute();
        $response = $stmt->fetchAll(PDO::FETCH_ASSOC);        
        return $response;
    }

    public function save($sql, $params)
    {
        $stmt=$this->bd->prepare($sql);
        return $stmt->execute($params);

    }

    public function borrar($sql, $params)
    {
        $stmt=$this->bd->prepare($sql);
        return $stmt->execute($params);

    }
}

存储库:

interface QueryClients
{
    /*
    * @return Client
    */
    public function searchById($id);

    /*
    * @return array()
    */
    public function searchAll(); 

    /*
    * @return int
    */
    public function count();


}


class RepoClients implements QueryClients
{
    private $ds;

    public function __construct(DSOps $_ds)
    {
        $this->ds = $_ds;
    }

    /*
    * @return array
    */
    public function searchById($id)
    {
        $sql = " SELECT  * FROM clients WHERE id=$id;";        
        $response=$this->ds->read($sql);
        return $response;
    }

    /*
    * @return array()
    */
    public function searchAll()
    {
        $sql = " SELECT * FROM clients; "; 
        $response=$this->searchAll($sql);
        return $response;
    }

....
}

我有多个实现相同设计的模块。 在实施这些设计时,我有以下疑问:

  1. 在存储库类中进行查询是否正确?
  2. 我应该在哪里处理SQL错误?有SQLError类吗?
  3. 我应该如何处理对API的访问?
  4. 由于我的应用具有对用户的基于角色的访问权限,因此这对我有何影响 设计/实施?根据我创建的登录用户角色 使用相同接口但实现不同的不同类 查询数据库。

0 个答案:

没有答案