實質上鼓勵一下吧

微軟的MVC架構喊得紅紅火火,PHP當然也不遑多讓,網路上有很多的平臺提供MVC的功能,例如zendCodeIgniter都是相當知名的,而且還是開放源碼,拿來研究的確會讓自己功力進步不少。不過裏面的程式碼通常都非常艱澀難懂,要看懂它自己的底子一定要夠硬才成。

要用PHP達到MVC的開發架構,最重要的原理就是讓網址變成/Control/Action/Params的方式,這個對現在的網站來說非常重要,因為SEO就是喜歡這樣格式的網址,要達到這個目的有兩個重要的步驟。

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

開發系統難免會需要使用到虛擬主機,我選用了visualbox這個免費軟體,用起來還蠻簡單的,而且直接支援虛擬DVD的功能,要裝軟體只要準備好iso檔就好了。裝好一個虛擬機器沒有甚麼問題,一切都很直覺兩下子就裝起來了,對外連線也不會有問題,不過卻會碰到你的主機連接不到虛擬機器的情況。

網路上有使用兩個IP和虛擬兩個網卡的方式,不過這樣非常麻煩,如果是在辦公室,你還需要跟網管去要可以用的IP。

漠哥 發表在 痞客邦 PIXNET 留言(1) 人氣()

在高階程式語言裏面的函數宣告,參數都可以用byval byref來將參數設定為傳值或傳位(也有人說是傳址,反正就是傳入參數的位址啦)。但javascript是個死硬派,堅持所有的參數都是傳值,只有物件才是傳位(事實上是物件這個變數裏面只保留了物件的位址,而我們拿的時候因為是物件所以直接就變成物件了,根本上還是傳值啦)。那麼有甚麼方法可以讓javascript傳回多個值呢?

第一種方法,使用全域變數,這個方法是簡單,但是很呆,如果這樣的東西一多,你的全域變數就滿街跑了。應該不用寫範例吧。

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

網頁的多國語文一直是個頭痛的問題,如果用程式碼硬幹,不外乎兩種策略,一個是使用資源檔,另一個是在資料庫中動手腳,用語文夾雜在欄位名稱上,然後根據所選語文挑選對應的欄位。不過這兩種做法都會讓原始碼變得難以閱讀。

不過這也都只是針對網頁上的固定文字進行多國語文的方案,對於內容是真的就很難。

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

ASP.NET中的MasterPage實在是太好用了,而在PHP裏面如果只是用傳統的方法,那麼只能夠把主要版面分段,然後個別使用include()的方式將主要版面湊出來,總覺得說不出來的彆扭。而且如果切割不好,那麼主要版面一旦改版,那麼內容頁就會改到死。使用傳統方法的程式碼大概像這樣:

<body>
<div><?php include('menu.php');?></div>
<div><?php include($page_content);?></div>
<div><?php include('footer.php');?></div>
</body>

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

前面介紹了幾個序列化的方式,而dotNet也提供了壓縮的方法,我就在想是不是可以在序列化之後順便壓縮一下呢。

實際做的時候才發覺有許多問題,查了網上其他人的寫法,程式都變得落落長,其實都是利用串流Stream做出來的,怎麼會搞成那麼複雜。在多次修改之後終於有了最後的版本。

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

我們在寫一些程式的時候,偶爾會遇到因為不同選項需要使用不同的程式,例如說需要設計給不同客戶的程式,主程式不變,但是處理的程序不同,以前的做法就是直接使用switch的方式來設計,但是一旦選項多起來,程式就非常的難以維護。

雖然這個方法在C++裏面是很普通的方式,但是如果不是一直研究程式寫法的話,往往不知道怎麼寫這樣的程式碼,只好用傳統的方法一直痛苦下去。

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

枚舉很好用,他可以讓我們寫程式更加的方便,不過在實際應用至輸出的時候,直接輸出值也不對,使用者看不懂,輸出對應的名字,又是英文而且還是個奇怪的變數型英文,也是看沒有。這時候就會想到寫一個轉換函數來對應它,但總覺得不是那麼的直覺。

   1: public enum ItemCreateType {
   2:     Porduction = 0,
   3:     Crossover = 1,
   4:     Mutation = 2,
   5:     Explosion = 3
   6: }

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

之前曾經寫過一個可以共用的XML序列化函數,雖然XML是個很容易閱讀的資料格式,但是缺點就是檔案太大。dotNet另外提供了二進位序列化方法,也是蠻簡單的但是實際上寫起來卻沒有那麼容易。

因為XML是個文字格式,所以序列化的時候也只有針對可以文字化的屬性做處理,但是換成二進位的時候卻要多注意很多事情,要把可以序列化跟不可以序列化的東西分得很清楚才行,最容易忽略的就是事件了。

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

在開發程式的過程中,可能為了除錯方便,需要將執行的過程記錄到LOG檔案中,這樣的東西應該是大家所共有的方法。而且這樣的動作在每個地方都會發生,所以應該寫一個公用的物件來處理這件事情。

   1: public static class EventLog {
   2:     public static string FilePath { get; set; }
   3:  
   4:     public static void Write(string format, params object[] arg) {
   5:         Write(string.Format(format, arg));
   6:     }
   7:  
   8:     public static void Write(string message) {
   9:         if (string.IsNullOrEmpty(FilePath)) {
  10:             FilePath = Directory.GetCurrentDirectory();
  11:         }
  12:         string filename = FilePath + 
  13:             string.Format("\\{0:yyyy}\\{0:MM}\\{0:yyyy-MM-dd}.txt", DateTime.Now);
  14:         FileInfo finfo = new FileInfo(filename);
  15:         if (finfo.Directory.Exists == false) {
  16:             finfo.Directory.Create();
  17:         }
  18:         string writeString = string.Format("{0:yyyy/MM/dd HH:mm:ss} {1}", 
  19:             DateTime.Now, message) + Environment.NewLine;
  20:         File.AppendAllText(filename, writeString, Encoding.Unicode);
  21:     }
  22: }

漠哥 發表在 痞客邦 PIXNET 留言(0) 人氣()

找更多相關文章與討論