2006年4月29日 星期六

進階PHP程式設計-Ajax


這一篇文章主要是教導各位怎樣在php的環境上開發Ajax程式
如果要撰寫ajax,HTML及JavaScript的基礎是相當必要的。

2006年4月18日 星期二

php資源(06/23 updated)

XML Data Mapping

在最近的專案中,可以發現幾個方向
XML資料存取分做三個方面來討論

我們嘗試過XML對Control的Mapping,但顯然地還是比較屬於自創的作法
並沒有相當好的泛用性
參考了Java的Castor,瞭解了Mapping其實只是一種簡單的關係

2006年4月1日 星期六

良好的系統的設計準則

綜合了一些結論,既有系統的設計方式,我可以發現到一些原則。

如果是應用系統

  1. UI的結果必須正確,不能有顯示在使用者前的描述是和任一其他描述的事實衝突,也就是說盡量要做到系統有完整性。
    例如說,明明使用者還可以透過同一台伺服器線上更新,卻將伺服器本身的錯誤推給網路問題。

  2. 如果有領域知識,要用圖形和文件妥善說明。
    例如說,系統是應用在什麼地方,應該要先瞭解怎樣的相關知識。

  3. 盡力描述這個系統能做到的及不能做到的(在需求分析階段)。
    尤其是不能做到的,例如以前有人要我們的專案管理系統可以掃毒...

  4. 不要有任何系統設計相關文件。
    使用者會產生用途的混淆,因為設計架構並不見得和應用的領域有關。例如說你大量使用哪一種設計樣式(Pattern),但是你在你的設定檔裡也都是那種樣式的名詞,像是Proxy對於寫程式跟網路應用就代表了兩種實做上不一樣的東西。

  5. 錯誤要描述清楚,可能應該有自動回報錯誤的機制,或系統本身有良好的錯誤控制機制。
    不要什麼都請洽系統管理員...


如果是系統框架(Framework)

  1. 框架的概念不應該有任何平台(任何OS或是任何程式語言)相依的描述,意思就是要完全抽象,或者只是單純說明領域知識。
    因為框架的實做很有可能在不同的平台上,如果真的要和平台有關連,也盡量寫在安裝或操作文件內,而不是概念文件。如果有許多不同領域的抽象概念,那也應該事先解釋清楚和哪種領域關連。

  2. 使用的字詞應該盡量和既有IT領域相關名詞雷同(儘管被人罵作太簡單),但這直接影響了接受度。
    例如Datagrid的SRB他們提出Resource,Domain,Zone,但卻給他與字面了不同的定義,導致他們每一次都必須解釋這些是什麼。而ComputingGrid的Globus雖然複雜,名詞也很多,卻並沒有太改變字面上的意義,像ResourceManager確實如其名(但都比較經常被說是GRAM)。

  3. 如果創造名詞,在同一個版本內不應該超過一個
    最讓我讚賞的就是驢子,一直到後來才出現Kad這樣的名詞,而他也不會告訴你他實做了什麼演算法。直到你開啟了進階選項,才有比較多的名詞是不常見的。而要說他的積分系統名詞比較多,但對使用者來說都是積分系統。

  4. 系統的目的要解釋清楚
    很多系統確實都沒有依照原來的目的,而失去焦點。例如Install Shield就是我最近認為的一個過份複雜的系統。給使用者的資訊已經超出「建立安裝套件」許多,而總是圍繞在商業化行為。如果說系統的發展很快,那應該分做子系統而不是繼續合併在一起。

程式設計的迷思

我今天被問到一個問題,「那我們還要學程式幹嘛?」

確實,我當下並沒有直接回答。如果人寫的東西能夠取代程式,那何必要存在程式這種東西呢?就如同以前教Socket的老師(研究領域是嵌入式系統)跟我說,物件也不過是將邏輯轉成比較接近人類,可是回歸到CPU都是一樣的,這點是千真萬確,那為什麼不寫比較接近CPU的語言?當時,我也無法問他為啥什麼都不寫組合語言,也無法反駁他說,那你為啥還要用C Compiler。

所以就如同現在我的工作上所接觸到的,讓我開始思考是不是描述語言會當道。我的同事們被教導,CPU已經很快了,所以不需要在Code上下太多功夫,只要思考設計,只要讓人好寫,只要有抽象概念即可,實做都可以是暴力法。反而我的Code被嫌說沒有可讀性,讓我也是無法反駁,所以我只好再說明上多多撰寫。

我其實不應該去將什麼事情都用二分法,但確實一個本來就沒有特定作法的事情,某人的作法到底好或是不好,也就無法定論。例如現在同事們的想法都是偏向,「可被描述的資料和程式結構」加上「簡單的程式邏輯」。而我的想法卻是在「可被描述的資料結構」加上「複雜的程式邏輯」。確實我的程式很複雜,可是也不需要使用者理解任何抽象觀念,只要資料即可。他們將程式邏輯變成描述,就必須理解他們的程式抽象觀念,到時候又是名詞一堆。加上我還聽到說,希望用程式去產生描述,總覺得好像哪裡錯了。

而我現在所贊同的道路,還是比較偏向將內部作法封裝起來,將系統的解釋都用現有平台的名詞去定義,或是運用簡單的知識,除非有必要,否則不創造新名詞。我相信使用者需要的不是彈性,那是開發者需要的。使用者需要的,還是完善的文件,範例,諮詢,正確簡單,漂亮炫麗的UI。如果真的要用XML進行邏輯描述,那應該是相當泛用的,不然就讓人會有半調子的感覺。