在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/PHP/ 關于PHP實戰(zhàn)中,項目架構(gòu),我想請教一下各位!

關于PHP實戰(zhàn)中,項目架構(gòu),我想請教一下各位!

1,簡單介紹一下,我現(xiàn)在理解的。我們現(xiàn)在做項目,比如商場。我們雖然是采用的MVC模式進行開發(fā),但感覺其中讓我有些迷茫的是,感覺像不是MVC。而且,我們公司的同事,都是這樣開發(fā)的,讓我覺得,我們好閉關鎖國。所以想請教一下,各位PHP們的看法。

:接下來,我就用代碼來描述一下。

//user.php[controller] -- 用戶控制器

class user {

    //獲取用戶信息[接口,或者是控制器入口]
    public function getUserInfo(){
        $mUser = new UserModel();
        $tUser = $mUser->getInfo($this-userId);
        
        echo json_encode($tUser);//輸出信息
    }
    
    
    
    //復雜一點的控制器 舉例用下單。
    public function order(){
        $product = I('product_id');//產(chǎn)品id
        $address = I('address_id');//收獲地址id
        $coupon = I('cuopon');//紅包id
        $bouns = I('bouns');//代金卷id
    
        
        #檢查produt是否存在
        //code .....
        
        #檢查紅包是否合理
         //code .....
         
        #檢查代金卷是否合理
         //code .....
         
        #檢查地址是否合理
         //code .....
         
        #獲取運費
         //code .....
         
        #操作訂單數(shù)據(jù)
         //code .....
         
        #保存訂單到數(shù)據(jù)庫
         //code .....
         
        
        echo '成功';
        
        //最后,我想表達的是,如果業(yè)務邏輯較多,我們的操作是,
        //會把這一系列的業(yè)務邏輯都放在控制器里面。這種有問題沒???,我總覺得,這樣做很復雜。
    }

}

模型:

//user 模型 [tp為例]
class UserModel{

    public function getInfo($userId){
    
        //我們的理解是,將與數(shù)據(jù)庫模型操作的,封裝起來。
        $tA = M('user')->where(array('user_id'=>$userId))->find();
        
        //下面,還可以進行一些數(shù)據(jù)的操作
        
        return $tA;
    }
    
    //復雜一點的模型
    public function getOrderInfo($id = '', $code = '',$userId = ''){
    
        //這方法的總點是,我們再開發(fā)中,總是會先像第一個方法一樣,
        //寫的時候很簡潔,看起來就是單一職責,
        //寫到后面,你發(fā)現(xiàn)那個方法,其實可以加個參數(shù),就可以重用了。
        //然后到最后,你就暈了。這個方法,到底用來干嘛的,
        //問:這種一個方法的設計原則,應該是單一職責吧,如果需要重用這種方式是否合理,
        //應該怎么來設計比較好?
        
        
        
    }
}
//最后用一些方式來標識設計的架構(gòu)

C - controller
M - model


例如一個操作
請求接口 ->  C   -> 調(diào)用M的方法1
                -> 調(diào)用M的方法2
                -> 調(diào)用M的方法3
                -> 調(diào)用M的方法4
                -> 調(diào)用M的方法5
                -> 調(diào)用M的方法6
                ->輸出結(jié)果
//這是公司同事的架構(gòu),他們總覺得,我的模型,只要封裝好方法就行了。然后控制器,可以一直這樣處理業(yè)務邏輯

//我的問題是,這種看起來是沒有錯,但閱讀起來,難度相當大,因為每個方法之間,依賴有點多(指M的方法1...6)
//如果你增加,或者減少一個M方法,那你就要閱讀整個業(yè)務邏輯代碼,好復雜。
//最后,
//我的理想業(yè)務邏輯是

C ->  M方法1 -> M1方法1->M2方法1
  ->  M2方法1 ->M1方法1->M2方法3


//我想的是,能不能做到,一個業(yè)務邏輯,看起來每一塊都是單一職責,都有一個入口,和一個出口,

不知道我表達清楚沒,哈哈哈。
總結(jié)一些吧。我想學習一下大家開發(fā)項目的架構(gòu)設計,關于MVC模式的架構(gòu)。請大家和我一起分享一下。好嗎?

回答
編輯回答
安淺陌

json 響應可以封裝成一個基類,然后控制器繼承,返回時統(tǒng)一調(diào)用基類的方法。
clipboard.png
把控制器中可以分離的都解耦到Service層,然后注入到控制器中,你這個應該是 TP, TP5 應該有依賴注入了。
表單驗證可以考慮使用更面向?qū)ο蟮姆椒?,比如這樣的:

clipboard.png

最后那兩個畫的沒看得清楚。
我通常是這樣寫的

clipboard.png

clipboard.png

clipboard.png

2017年9月23日 23:56
編輯回答
久不遇

沒有統(tǒng)一的標準吧,我可以分享一下我們的做法,我們不是mvc。

app |
    |- Comps |
             |--- Article |
                          |--- ArticleTransformer.php
                          |--- ArticleModule.php
                          |--- ArticleRepository.php
                          |--- ArticleService.php
                          |--- ArticleTrait.php
    |- doc |
           |--- sql |
                    |--- sql
    |- Config |
              |--- database.php
    |- Helpers |
               |--- Support.php
    |- Models |
              |--- Article.php
https |
      |- Controllers |
                     |--- Article |
                                  |--- ArticleController.php
                     |--- register.php
                     |--- routes.php
vendor |...

比如這個
app為項目目錄:

  • Comps為模塊目錄,將項目分成相應的模塊;
  • Transformer方法來格式化輸出數(shù)據(jù)(對外);
  • Module文件為模塊入口(對外);
  • Repository為數(shù)據(jù)庫操作Model的倉庫(對內(nèi));
  • Service為處理復雜邏輯(對內(nèi));
  • Trait為對外暴露Module和Transformer文件出口;
  • Config為配置目錄
  • Helpers為支持文件目錄
  • Models為數(shù)據(jù)庫Model目錄
  • doc為文檔目錄
  • Controllers為路由目錄;

controllers只能通過trait來調(diào)用module目錄里面的Module和Transformer文件,模塊之間的調(diào)用可以直接調(diào)用對方的module,但是!Server和Repository不能跨模塊調(diào)用

2017年8月1日 00:41