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/cn.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