PHP 板


LINE

看板 PHP  RSS
※ 引述《j87b0003 (I'm 邱老虎)》之銘言: : 雖然CI很久沒更新了…(我也離開寫程式行業二~三年) : 不過近四個月,也越來越有心得,後來就慢慢找到自己的習慣開發方式 : 我自己個人: : 【Model】 : 負責與資料庫,所以幾乎會寫概觀的通用性 : 通常會有: : get_list($where, $limit, $offset, $order) : 用來分頁/列表用 : get_where($where) : 取得單一資料 : on_duplicate_batch($data) : 資料新增與更新 : delete($where)、add($data)、update($data, $where) : 後面的新增和更新幾乎都很少用了 : 【Libs】 : 介於model和controller中間 : 把model的功能性除原本的,也做更多擴充,做更多細項 : get_list_rows($where) =>> model->get_list($where)->num_rows() : get_by_id($id) =>> model->get_where(array('id' => $id )) : on_duplicate($data) =>> modetl->on_duplicate_batch(array(0 => $data)) : delete_by_id($id) =>> model_delete(array('id' => $id )) Hi model的部份這個給各位參考 功能強大 https://github.com/jamierumbelow/codeigniter-base-model : 【View】 : 以add、alter為例,會共用同一個view, : 在js檢查完後,直接以 : var data = { : field : field_data : } View的部份 也許可以考慮找個template 這個給各位參考 https://github.com/philsturgeon/codeigniter-template Codeigniter本身有點限制 譬如他沒有良好的test支援 內建的test library太陽春 開發方法論上無法進行TDD(testing driven development) 解法還是有的 整合simpletest這個php測試工具即可 這個給各位參考 https://github.com/ericbarnes/codeigniter-simpletest 另外 Codeigniter沒有內建ORM CI_Model什麼功能都沒有提供 而$this->db所抓出來的資料 是直接對應到資料庫的array 就算是object也只是stdClass object 方法論上 若是採用DDD(Domain Driven Development) 由於無法設計domain class 你無法寫出類似這樣的東西 $this->load->model('Car_model'); $car = $this->Car_Model->get($id); // 這台車子開跑了 $car->run(); // 車子壞了 顯示訊息要求修理 $car->askForFix(); 在不引入Redbean之類ORM的情況下(採用Active Record pattern) 很難實行DDD方法論 若是想用Data Mapper pattern去實作DDD的話 除非引入Doctrine之類的工具 否則實作起來依然十分辛苦 可以說是Codeigniter會鼓勵'反正model吐陣列資料給controller用就對了'的想法 程式碼極度容易出現Fat model的現象 反正就是設法用$this->db去吐資料出來 常常會出現真的非常fat model的現象 fat model skinny controller並不是一個好現象 應該要skinny 所有東西 fat model是貧血model 糟糕design pattern的一種 http://www.martinfowler.com/bliki/AnemicDomainModel.html 在開發速度/結構漂亮的平衡之下 我所想到又快又美的方法只有.. model稍微肥一些沒關係 但是請引入Service Object的觀念 有些功能確實直接放進model似乎很合理 但是跟Model本身沒有直接關係 只有間接關係、互動關係的功能 舉例來說 假如一個電子商務網站要做發email 備份資料庫 兩件事 不要在Order_model(訂單的model)裡面實作這兩件事 在library底下開一個MY_APP資料夾 裡面在開一個Services資料夾 建立DatabaseManager.php與MailSender.php 裡面寫類似這樣的東西 class MailSender{ protected $CI; function __construct(){ $this->CI =& get_instance(); $this->CI->load->database(); } function advertise_to_friends($data){ // do something } } 在需要執行這些service的controller或是model內 這樣寫即可 $this->load->library('MY_APP/Services/MailSender'); $this->mailsender->advertise_to_friends($data); 將一大堆service獨立出來、整理在一起 可以大幅降低fat model的現象 fat model根本就是God pattern 小project就算了 中型以上請避免 也許會有人想說 library應該是放一些工具包吧 怎麼會把商業邏輯放進去 我想提到一件事 就是「框架不是你的應用程式」 以我上面舉的例子來說 應用程式幾乎只是那個MY_APP資料夾 框架'可以'視為不過是提供使用者介面的手段而已 http://blog.firsthand.ca/2011/10/rails-is-not-your-application.html 一些想法 供各位參考 ------------------------------------------------------------------- ps1: 上文所提model template test我有整理在一起 https://github.com/howtomakeaturn/codeigniter-scaffolding ps2: 我對Codeigniter做過粗略的分析 給各位參考 https://github.com/howtomakeaturn/Analyze-Codeigniter --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.49.208
※ 文章網址: http://webptt.com/m.aspx?n=bbs/PHP/M.1405655617.A.B8E.html
1F:推 chief84:推 07/21 05:36
2F:推 derekx:大推 07/24 21:25
3F:推 marcoyan:好文~ 07/25 06:52







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP