williamraym

          基于ExtJS開發(fā)的單用戶BLOG系統(tǒng)文檔及源碼

          總述
             這是一份較為完整的文檔,對我們開發(fā)的這個Blog示例從系統(tǒng)需求、系統(tǒng)設(shè)計、實現(xiàn)以及前端展示效果實現(xiàn)等都作了較為詳盡的講述。
            整個文檔主要包括四個部分,第一部分是是講系統(tǒng)需求及設(shè)計,在設(shè)計的部分主要講解域模型的設(shè)計,重點講解了JPA標(biāo)簽的使用;第二部分是講解系統(tǒng)的后臺實現(xiàn),對數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層等作了簡單的介紹,并對開發(fā)流程作了比較詳盡的講解;第三部分是整個文檔的核心部分,我們重點講解了客戶端的用戶界面實現(xiàn),主要是如何使用ExtJS來實現(xiàn)Blog后臺管理系統(tǒng)的各個部分,在對使用到的ExtJS控件如面板Panel、選項面板、樹、表格、自定義控件等都作了較為詳細(xì)講解,并結(jié)合應(yīng)用中的示例中較為全面的分析;第四部分是簡單介紹Blog程序的前臺實現(xiàn),由于前臺沒有使用到ExtJS,只是傳統(tǒng)的Web應(yīng)用,因此所占的篇幅比較小。
            文檔非常適合ExtJS的初學(xué)者使用,也適合那些準(zhǔn)備從事Web2.0應(yīng)用及富客戶端應(yīng)用開發(fā)的開發(fā)人員使用。雖然我們在寫的代碼的時候盡量讓源碼具有可讀性,但我想有這份文檔的幫助,一定能讓你快速掌握本示例中涉及到的各項新技術(shù)。


          寫在前面
            為了便于大家學(xué)習(xí)ExtJS、JPA、EasyJWeb等前沿的技術(shù),我與冷雨、大峽等人一起寫了這個Blog示例應(yīng)用,并把源代碼開放給大家,供學(xué)習(xí)交流使用。
            為了能讓大家更好的上手了解這個應(yīng)用中的技術(shù)構(gòu)架、技術(shù)細(xì)節(jié)等,我寫了這份文檔,主要是能為愿意了解這個示例程序中技術(shù)細(xì)節(jié)的同行們提供一些幫助。
            為了能讓我能把這個工作更長久地支撐下去,我決定針對這份長達(dá)130頁的文檔收取少許的費用。我也辛苦啊,敲鍵盤敲得手抽筋無數(shù)次,請大家理解,作為一個程序員,你應(yīng)該知道不管是寫程序也好,還是寫文檔,寫多了都是比較累的事。
            為了讓那些上進(jìn)好學(xué),而經(jīng)濟(jì)上又有一定困難的在校學(xué)生(特別是來自農(nóng)村的大學(xué)生)也有同等的學(xué)習(xí)機(jī)會,我決定把這份文檔對這部分朋友們免費開放。我相信,未來是你們的,只要你努力,中國程序員及中國軟件環(huán)境的現(xiàn)狀將會因你們而改變。贈送的前提是,無論現(xiàn)實怎樣,您都應(yīng)該要有為中國的開源事業(yè)出一點點力的決心及行動。
             為了表達(dá)對一直戰(zhàn)斗在開源前線的國內(nèi)開源同行們的敬意,我也將把這份文檔作為2008的新年禮物贈送給你們,只要您為一個國內(nèi)的開源項目提供過源碼并被采用,你也可以直接得到這份文檔。
              為了感謝EasyJF開源團(tuán)隊的朋友們一年多來對我在技術(shù)學(xué)習(xí)上提供的諸多幫助,我決定把銷售這份文檔所得收入的50%捐贈給EasyJF開源團(tuán)隊,也算盡一點微薄之力。希望EasyJF能在2008年真正的把想做事情做起來,而不要總是一點點資金上的因素,導(dǎo)致很多應(yīng)該去做的事情而沒有去做,或者沒有做成。同時也希望每一個熱愛技術(shù)的同仁們行動起來,對國內(nèi)的開源組織及團(tuán)隊給予一定的支持。
            為了能提供更專業(yè)的服務(wù),我已經(jīng)邀請了EasyJF團(tuán)隊中對ExtJS、Ajax、JPA等技術(shù)比較熟悉的冷雨、stef、大峽等人,組成了一個小小的顧問小組,我們可以為您或您的公司提供關(guān)于ExtJS、JavaEE方面的技術(shù)咨詢及服務(wù);如果您對這些技術(shù)很熟悉,我們也非常歡迎您成為我組織的這個顧問小組的成員。
             由于時間比較倉促,該文檔肯定還存在很多問題,我會通過我的blog不斷的更新這份文檔,希望您隨時關(guān)注我的Blog系統(tǒng)中內(nèi)容更新。
          文檔收費標(biāo)準(zhǔn)
            個人:120元/份,只允許一人使用
            公司或組織:800元/份
          繳費用戶除了得到文檔以外,還可以享有下面的服務(wù):
            1、 兩個月的VIP會員時間,可以查看我Blog上提供的各種VIP資源;
            2、 可以加入我組建的專門解答大家問題的QQ群,有效時間為三個月,你可以在群里咨詢關(guān)于ExtJS、JPA、EasyJWeb等相關(guān)技術(shù)的問題,我將會組織人及時給您解答;


          文檔詳細(xì)目錄:http://wlr.easyjf.com/doc.html

          源碼下載:http://wlr.easyjf.com/download.html

          其它服務(wù):http://wlr.easyjf.com/service.html


          后記

             終于寫完了,有點天暈地暗的感覺,不知道這篇文檔能不能把這個示例講清楚。我想,不同技術(shù)水平,不同層次人應(yīng)該都會有自己的理解吧。希望這篇文檔能對所有關(guān)注開源的朋友、每一個熱愛并渴望學(xué)習(xí)的朋友有一定的幫助。
           最后再一次強(qiáng)調(diào)的是,我們提供下載的示例及代碼盡供學(xué)習(xí)研究ExtJS、JPA、EasyJWeb等前沿技術(shù)使用,沒有得到我們的書面許可,請不要用于任何商業(yè)用途,因為畢竟這只是一個演示程序,他還有很多地方不完善,甚至還有不少Bug,當(dāng)數(shù)據(jù)量大的時候在某些地方還會存在性能問題,需要作一些適當(dāng)?shù)膬?yōu)化。
             在發(fā)布了這個開源版本之前,我與冷雨、大峽等人對發(fā)布的版本又作了幾次Bug修正,但仍然沒能修正更多的Bug,在這方面還請大家在研究的過程多多參與交流,把存在問題反饋給我們,非常感謝。
            作來一個原型示例,我們將不會在對這個開源的版本進(jìn)行更新,而會根據(jù)我們的需求不斷更新在線的示例程序,也就是我的Blog系統(tǒng),并會不斷添加一些新的功能,對系統(tǒng)進(jìn)行性能優(yōu)化等工作,我們會把這些工作的成果文檔及源碼根據(jù)需要發(fā)布在我的Blog中,歡迎大家多多指點。
            作為Web2.0的一個產(chǎn)物,ExtJS并不是最完美的,也并非所有場景都適合使用富客戶端技術(shù)。因此,在迷戀ExtJS華麗的外表、驚嘆EasyJWeb給我們帶來簡便的同時,也希望大家能根據(jù)實際的情況有選擇地使用這些技術(shù)。
            最后:祝每位戰(zhàn)斗在技術(shù)前線的程序員同行工作愉快、新年快樂,向每一位為開源而默默貢獻(xiàn)著的朋友們致敬。

          posted on 2008-01-28 12:46 WilliamRaym 閱讀(3250) 評論(4)  編輯  收藏

          評論

          # re: 基于ExtJS開發(fā)的單用戶BLOG系統(tǒng)文檔及源碼 2008-01-28 15:51 beans

          對學(xué)生及開源人士免費啊,樓主真是好人。  回復(fù)  更多評論   

          # re: 基于ExtJS開發(fā)的單用戶BLOG系統(tǒng)文檔及源碼 2008-01-28 16:21 sakura

          我是在校學(xué)生,電子科大,大二,對此很感興趣,我想認(rèn)真學(xué)習(xí)一下,謝了~~
          du-yang@msn.com  回復(fù)  更多評論   

          # re: 基于ExtJS開發(fā)的單用戶BLOG系統(tǒng)文檔及源碼 2008-01-28 19:20 WLR

          現(xiàn)在可以直接通過wlr.easyjf.com下載代碼了  回復(fù)  更多評論   

          # re: 基于ExtJS開發(fā)的單用戶BLOG系統(tǒng)文檔及源碼 2008-12-04 10:14 rufus

          public static string GetJSON(object value)
          {
          HandleJSON V_0 = new HandleJSON();
          return V_0.getJSON(value);
          }

          private class HandleJSON
          {

          private IDictionary vars = null;
          private IList stack = null;
          private IList declars = null;
          private int d=0;

          public HandleJSON()
          {
          this.vars = new Hashtable();
          this.stack = new ArrayList();
          this.declars = new ArrayList();
          this.d = 0;
          }

          public string getJSON(object value)
          {
          int V_2;
          string V_0 = this.generatorJSON(value);
          string V_1 = "";
          for (V_2 = 0; V_2 < this.declars.Count; V_2++)
          {
          V_1 = V_1 + this.declars[V_2];
          }
          for (V_2 = 0; V_2 < this.stack.Count; V_2++)
          {
          V_1 = V_1 + this.stack[V_2];
          }
          return (V_1 + "return " + V_0 + ";");
          }

          public bool IsSimpleType(Type type)
          {
          return (type.IsPrimitive || type.Equals(typeof(string))) || (type == typeof(DateTime));
          }

          public string generatorJSON(object value)
          {
          string V_0 = "";
          string V_1 = "v" + d++;
          if (value == null)
          {
          return V_0 + "null";
          }
          if (IsSimpleType(value.GetType()))
          {
          if (value is DateTime)
          {
          DateTime V_2 = (DateTime)value;
          return string.Concat(new object[] { "new Date(", V_2.Year, ",", V_2.Month, ",", V_2.Day, ",", V_2.Hour, ",", V_2.Minute, ",", V_2.Second, ")" });
          }
          if ((value is string) || value.GetType().IsEnum)
          {
          string V_3 = value.ToString();
          V_3 = V_3.Replace("\"", """);
          return "\"" + AjaxUtil.convert2unicode(V_3, true) + "\".replace(/"/g, '\"')";
          }
          if (value is bool)
          {
          return value.ToString().ToLower();
          }
          return "" + value;
          }
          vars.Add(value, V_1);
          if (value is IDictionary)
          {
          V_0 = handlerMap(V_1, value);
          }
          else if (value is ICollection)
          {
          V_0 = handlerCollection(V_1, value);
          }
          else if (value.GetType().IsArray)
          {
          V_0 = handlerArray(V_1, value);
          }
          else
          {
          V_0 = handlerObject(V_1, value);
          }
          return V_0;
          }

          核心源碼請訪問http://www.xiangyu2099.cn
            回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宝坻区| 名山县| 靖江市| 湛江市| 曲周县| 仁怀市| 北辰区| 麦盖提县| 绍兴县| 神农架林区| 平度市| 贡山| 庄浪县| 肥西县| 浑源县| 琼海市| 松阳县| 玉门市| 通山县| 许昌市| 龙胜| 乌拉特前旗| 肃宁县| 柘荣县| 临夏县| 藁城市| 普陀区| 宁远县| 吐鲁番市| 海安县| 华蓥市| 朝阳区| 鄂托克前旗| 电白县| 郎溪县| 桐柏县| 宣城市| 海淀区| 云林县| 南郑县| 临澧县|