jframe是什麼? jframe是一個基於MIT協議開源的java web應用程式框架,匯聚了我們團隊之於java web應用程式的核心架構思想以及大量最佳實踐,並且持續在實際項目中不斷完善優化。 簡單的講,jframe可以看成是MvcSolution(一個基於ASP.NET MVC的程式框架)的 ...
jframe是什麼?
jframe是一個基於MIT協議開源的java web應用程式框架,匯聚了我們團隊之於java web應用程式的核心架構思想以及大量最佳實踐,並且持續在實際項目中不斷完善優化。
簡單的講,jframe可以看成是MvcSolution(一個基於ASP.NET MVC的程式框架)的java實現,因為它們體現的都是完全同樣的架構思想和非常相似的最佳實踐。
如果你是一個java新手,想要學習如何成為java架構師,相信jframe和本系列文章將會給你很大的幫助;
如果你是學.NET的想要轉java,但是卻不知道怎麼開始,本系列文章和jframe框架也會是你不錯的選擇,因為本系列文章會解釋很多為什麼,還會分享我們踩過的坑,對於你理解java體系的邏輯大有助益;
如果你是java大神,你也可以看看jframe的實現,因為jframe裡面融合了很多.NET世界的優點(比如java版的linq),可能是java程式員不曾體會過的,當然,我們更希望java大神們多多指點,指出我們的錯誤實踐,幫助jframe不斷完善。
jframe的架構思想:分層和模塊化
應該說任何一個架構師在做項目架構的時候,不管那個項目多麼複雜,其架構思想都是分層跟模塊化。
jframe的主要分層(5層):
- infrastructure(基礎設施);
- data(資料庫定義);
- service(資料庫訪問);
- web(controller);
- web前端(html/js/css)。
每一個主要分層中,其實是由無數個小層組合起來的。比如我們的data層就分了:資料庫、數據表對應的實體類、枚舉類、枚舉類converter、DbSet、data層基礎設施等等。
再細分,每一個類又可能分了很多個層(也可以算是編碼規範)。比如我們的枚舉類就分了:值定義、文檔、獲取值、值邏輯計算等。
所以,基於jframe進行開發,我們建的每一個文件和寫的每一行代碼都有它應該待的地方,都不是想放在哪裡就放在哪裡的。比如一個枚舉類應該放在哪個文件夾,枚舉類的內容應該怎麼寫。
當然,雖然jframe定義了大量的規範,但是我們卻極其推崇自由的寫代碼的方式。舉個簡單的例子:我們完全不排斥中文寫代碼,反而對於某些很難說清楚的事情我們強烈推薦用中文命名變數/方法,因為那比一個錯誤的英文命名+一個正確的中文註釋容易維護多了。在整個jframe框架中,你會看到大量的非常自由的代碼,完全不受傳統的編碼潛規則的束縛,比如,你會在一個枚舉類裡面看到大量的業務邏輯的實現。
這樣的話,看上去jframe既是一個規範強迫者又是一個自由主義者。這其實源於我們唯一的編碼規則。
jframe唯一的編碼思想:把相關的業務邏輯寫到一堆
這個算什麼思想呢?連個名字都沒有,不像TDD、DDD、AMD這麼高大上,但這個思想是我們這麼些年總結下來唯一適用得最好的編碼指導思想。其實呢,它還是有一個名字的,叫fat model開發方式,也就是說你建一個類,你就卯足了勁把這個類寫肥,把它相關的業務邏輯全部寫到一起,肥死它。(Fat Model原意是指在MVC模式中,把MVC中的M寫肥,本文的思想不局限於MVC的M,而是項目中的全部實體類)。其實跟DDD也是很相似的,只不過DDD建議的是把Domain層實體類寫肥。
比如:你建了一個dto對象從資料庫查詢數據,但是你卻把sql寫在另外一個地方(如service層),某一天,你需要增加一個欄位的返回,這時你就需要find usages(clipse裡面叫refercene)去一個一個找了;但是如果你把查詢sql就放在dto對象內部,那要增刪改某個欄位就非常不容易出錯了。
這裡,不小心提到了一個好架構應該具備的品質:讓程式員不容易寫出錯誤的代碼。
後面我會專門寫文章解釋為什麼jframe不用spring data,主要原因就是其對於事務的管理非常容易讓程式員寫出錯誤的代碼。
jframe的架構思想:模塊化
jframe自帶的模塊有這4個:
- admin:超級管理員後臺;
- pc:pc瀏覽器版;
- app: app 瀏覽器版,可以理解為微信版或H5版;
- api:為WEB前端提供API訪問;
模塊都是隨便加減的,增加或移除一個模塊對系統沒有任何影響。你也可以根據項目需要自建更多模塊。
jframe的依賴
- jdk8
- spring mvc
- mysql
- hibernate
- commons
- fastjson
- tiles
- maven
- tomcat
為什麼用JDK8 呢?因為jframe用到了大量的lamda表達式,這也是因為我們用習慣了C#,無法忍受沒有lamda的編程體驗。
mysql 客戶端我們是用的dbeavor,感覺比Navicat好用很多。
jframe使用的IDE: intellij idea
官網下載地址:http://www.jetbrains.com/idea/
intellij idea是本人認為最好的java集成開發工具了,該工具也是由jetbrains公司開發的,就是resharper的開發者。用過resharper的朋友應該都深有體會,他們公司的產品實在是太懂程式員了。
雖然沒有用過myeclipse,但是用過幾個月的eclipse和基於eclipse修改的幾個其他定製版,感覺eclipse系列相比intellij idea差了1萬倍。本人用了幾個月的eclipse還是覺得離visual studio相差甚遠,但是用了intellij idea幾個小時就覺得跟vs的寫代碼的體驗非常接近了。所以,如果你還沒有嘗試過intellij idea,請一定要嘗試一下,即使你已經用eclipse用的滾瓜爛熟倒背如流也值得一試。
關於作者
本來不想加關於作者這一節的,但是考慮到對讀者負責,於是還是加上一個簡短的說明。主要是想告訴讀者,作者並非java領域的大神,也不是來自BAT等知名公司,作者只是一個普普通通擁有8年編程經驗的架構師,對於架構有一些自己的見解。作者從開始java開發到現在也只有半年時間,只不過web程式的架構不管是.NET還是java都有很多相似之處,因此才將.NET平臺下的MvcSolution搬到java的世界,於是才有了jframe。
另外,作者對於編程思想有很多“不合規矩”的想法,希望讀者朋友們在讀到這些奇怪的想法時,可以以更open一點的心態來擁抱這些奇怪的想法,因為世界是在不斷改變的,現在對你來講很難接受的一個想法說不定過幾年你就完全認可了。作者也是一個善於獨立思考的人,從來不迷信任何權威,比如就連這麼流行的spring mvc,作者也認為有很多設計不合理的地方。於是,作者自己創造了很多新的東西,也重覆發明瞭不少的輪子。
所以,作者雖然不能保證jframe一定比你們現在的框架更優,但卻可以保證在你看jframe框架的時候,你會看到很多突破常理的設計,會看到很多新的東西。這些新的東西可能會給你新的靈感,這樣,可能就已足夠了。
jframe 源碼下載
好了,理解了jframe的基本架構思想和編程思想,也對外部依賴和IDE有了基本的概念,現在可以下載jframe看看了。
github 項目地址:https://github.com/leotsai/jframe
中文QQ技術交流群:651499479
下一篇預告,jframe文件組織結構、maven依賴管理、調試、發佈,敬請期待。
THE END.