2015年9月28日 星期一

MVC 使用心得

從知道 CodeIgniter 之後,使用 MVC 架構來開發網頁也好一段時間了。到現在,若沒有 MVC framework,就不曉得怎麼動手了。

剛開始時,會想要遵循 Model/View/Controller 的拆解原則來安排程式。可是在移轉一些舊有的 ASP 或 PHP 程式之後,發現最基本的架構,只用到 Controller + View,然後把一些共用的程式碼抽出來,放到 Lib 下。而資料庫存取,大都用 DB query builder 來完成。因此,那個 Model 就變得很奇怪的角色,不曉得該如何歸類,或該放些什麼進去。

到了開始使用 Laravel 5.0 時,發現它把 Model 的目錄給拿掉了。有明確目錄位置的是 Controller 和 View,其餘的自己看著辦。看來大勢所趨,網頁程式,大抵是就是,Route + Contoller 扮演 dispatcher 的功能,View 輸出結果。其餘的,就是 Bussiness Logic 了,大概就是建一堆 Class,擺在適當的目錄下。

2015年9月12日 星期六

通識教育,是營養學分?

通識教育,是營養學分?
其實,在社會上工作之後,會發現,一個人所學範圍越廣,知識越廣,瞭解的層面越寬廣,發展可能性就會越好。
另一方面,依據大部人的經驗,很多人在畢業之後就業,和他在校所學,百分之七八十都沒關係。
所以,通識課程,在廣面來講,對於個人來講是有幫助的。

引述 臺灣大學,江才健老師的 <科學在文化中的定位和挑戰>
連結 -- http://get.aca.ntu.edu.tw/getcdb/handle/getcdb/253687

2015年9月7日 星期一

在 Grails 下,使用 Apache FileUpload

我不曉得在台灣有多少人在用 Grails,其中是否有人也碰到類似的問題。還是稍微記一下,供可能碰到同樣問題的人參考。

在 Grails 下,自行建立的 Servelet 中,使用 Apache FileUpload 處理上傳檔案,程式碼大致如下

DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List /* FileItem */ items = upload.parseRequest(request);

不論怎麼試,所傳回的 items 一直都是空的。

好不容易,才找到問題所在,因為 Grails 會在預先處理 request 的資料。因此要修正 config.groovy,將 disable 處理 multi part requests 的設定設為 true
// whether to disable processing of multi part requests
// grails.web.disable.multipart=false
grails.web.disable.multipart=true

原因,依據 Apache's FAQ page for FileUpload 中的說明,"A Request can only be parsed once."

Question: Why is parseRequest() returning no items?
Answer: "This most commonly happens when the request has already been parsed, or processed in some other way. Since the input stream has aleady been consumed by that earlier process, it is no longer available for parsing by Commons FileUpload."


網誌存檔