iT邦幫忙

0

資料與邏輯的拆分

各位大神好~
小魯又問問題了...
小魯今天被前輩提醒 Code要好維護 資料跟邏輯要拆分 但小魯腦袋卡住轉不過來想說我已經將PDO用Class包裝 這樣不算拆分嗎?

不知道大神們都是怎麼處理這件事的?
底下是被嫌棄的Code一部分 風格大概都是這樣 想請大神給點建議他他乾淨一點
乾霞QQ

private function Chekdata($jsondata){
        if($jsondata['username']==''){
            $this->SetResult(-1,'帳號為空');
            return false;
        }
        if($jsondata['password']==''){
            $this->SetResult(-1,'密碼為空');
            return false;
        }
        if($jsondata['startcode']==''){
            $this->SetResult(-1,'啟動碼為空');
            return false;
        }
        if($jsondata['machinecode']==''){
            $this->SetResult(-1,'機碼為空');
            return false;
        }
        if(!DBGetter::Get()->Check('member','account',$jsondata['username'])){
            $this->SetResult(1,'錯誤的帳號');
            return false;
        }
        $memberdata = DBGetter::Get()->QueryOne('member','id,password,startcode,used_period','account',$jsondata['username']);
        $Passworder = new DjangoPassworder();
        $this->memberid = $memberdata['id'];
        if(!$Passworder->VerifyPassword( $jsondata['password'],$memberdata['password'] )){
            $this->SetResult(1,'錯誤的密碼');
            return false;
        }
        
        if($memberdata['used_period'] < date("Y-m-d")){
            $this->SetResult(2,'使用期限過期');
            return false;
        }

        if($jsondata['startcode'] !=  $memberdata['startcode'] ){
            $this->SetResult(3,'啟動碼與登入帳戶不符');
            return false;
        }
        
        $sql ="SELECT activate FROM machinecode WHERE code = :code And member_id = $this->memberid";
        $tmp_db =DBGetter::Get()->DB()->prepare($sql);
        $tmp_db->bindParam(":code",$jsondata['machinecode']);
        $tmp_db->execute();
        $machinecode = $tmp_db->fetch(PDO::FETCH_ASSOC);
       
        if(!$machinecode){
            $this->SetResult(4,'機碼與登入帳戶不符');
            return false;
        }

        if($machinecode['activate'] == 0){
            $this->SetResult(5,'該機碼已被禁用');
            return false;
        }
        return true;
    }
看更多先前的討論...收起先前的討論...
小魚 iT邦高手 1 級 ‧ 2018-11-29 19:05:58 檢舉
他說的可能是SQL那一段吧...
不過我們的習慣是把所有資料庫相關的放到同一個class中處理
weiclin iT邦高手 4 級 ‧ 2018-11-29 19:22:33 檢舉
參考看看 "Data Access Object"
ant1017 iT邦新手 5 級 ‧ 2018-11-30 08:30:17 檢舉
我習慣一個資料表會放在一個Class內,兩個就會有兩個Class,因為Boss喜歡搞"突然想到"這招...
感謝3為大大的回答 參考了Data Access Object 之後 小魯心裡大概有個底了XD
Model
1.Entity(table,column and Relationship)
2.Repository(logic,dataoutput and other)
都是簡單的英文應該不用翻譯吧
可樂大 單字都懂 可是意思不懂@@
fysh711426 iT邦研究生 4 級 ‧ 2018-11-30 14:50:08 檢舉
SQL 可以放在 Repository (資料層)
不過很短的 SQL 有時候會偷懶不分層,哈哈哈
但統一把 SQL 獨立出去是比較好的做法

1 個回答

0
浩瀚星空
iT邦高手 1 級 ‧ 2018-11-30 09:43:10
最佳解答

依照你目前的程式來看。大體動作有分如下

1.檢查輸入欄位
2.登入帳密確認
3.啟動、機碼檢查

一般來說,在mvc的架構體制下。
登入為控制,但其上面三個我會各自區分一個model方法。
不會寫在一起。不過如果是跟帳號有關的。就會直接在帳號的模組下增加這三個方法。

pdo組合為一個class。只是將工具封包一個物件。這是一定必要做的事。
我想你前輩的意思是這樣。因為我看你這一段我也會叫你拆分處理的。

浩瀚星空 大大
感謝你的回答 小魯知道該怎麼做了

我要發表回答

立即登入回答