【jframe】Java架構師之路 - 第01篇:Get Started

来源:http://www.cnblogs.com/leotsai/archive/2017/06/30/jframe-01-get-started.html
-Advertisement-
Play Games

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個:

  1. admin:超級管理員後臺;
  2. pc:pc瀏覽器版;
  3. app: app 瀏覽器版,可以理解為微信版或H5版;
  4. api:為WEB前端提供API訪問;

模塊都是隨便加減的,增加或移除一個模塊對系統沒有任何影響。你也可以根據項目需要自建更多模塊。

 

jframe的依賴

  1. jdk8
  2. spring mvc
  3. mysql
  4. hibernate
  5. commons
  6. fastjson
  7. tiles
  8. maven
  9. 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.

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目描述 輸入N(N<=10000),驗證4~N所有偶數是否符合哥德巴赫猜想。 (N為偶數)。 如果一個數,例如10,則輸出第一個加數相比其他解法最小的方案。如10=3+7=5+5,則10=5+5是錯誤答案。 輸入輸出格式 輸入格式: 第一行N 輸出格式: 4=2+2 6=3+3 …… N=x+y ...
  • 一、配置Maven環境 1.下載Maven 下載鏈接http://maven.apache.org/download.cgi 2.下載完成解壓壓縮包並創建本地倉庫文件夾 3.打開解壓縮文件,配置本地倉庫路徑 4.配置Maven環境變數 5.在cmd中查看maven是否配置正確 在cmd中輸入mvn ...
  • 題目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. The cows are conducting another one of their strange protests, ...
  • JSON 即是key-value存儲方式,存儲內容對象和數組 ...
  • 題目描述 湯姆斯生活在一個等級為0的星球上。那裡的環境極其惡劣,每天12小時的工作和成堆的垃圾讓人忍無可忍。他嚮往著等級為N的星球上天堂般的生活。 有一些航班將人從低等級的星球送上高一級的星球,有時需要向駕駛員支付一定金額的費用,有時卻又可以得到一定的金錢。 湯姆斯預先知道了從0等級星球去N等級星球 ...
  • 題目背景 USACO 題目描述 很少有人知道奶牛愛吃蘋果。農夫約翰的農場上有兩棵蘋果樹(編號為1和2), 每一棵樹上都長滿了蘋果。奶牛貝茜無法摘下樹上的蘋果,所以她只能等待蘋果 從樹上落下。但是,由於蘋果掉到地上會摔爛,貝茜必須在半空中接住蘋果(沒有人愛吃摔爛的蘋果)。貝茜吃東西很快,她接到蘋果後僅 ...
  • 題目背景 Usaco Feb08 Bronze 題目描述 為了避免餐廳過分擁擠,FJ要求奶牛們分2批就餐。每天晚飯前,奶牛們都會在餐廳前排隊入內,按FJ的設想,所有第2批就餐的奶牛排在隊尾,隊伍的前半部分則由設定為第1批就餐的奶牛占據。由於奶牛們不理解FJ的安排,晚飯前的排隊成了一個大麻煩。 第i頭 ...
  • 5.領域模型設計 下麵我們創建賬戶子系統(AccountSubsystem),賬戶子系統雖然被門戶服務使用,但是子系統本身是獨立於任何服務存在的。所以我們為賬戶子系統創建獨立的項目解決方案: 子系統的項目解決方案比服務的項目解決方案需要引用的程式集少很多。除瞭解決方案文件夾Framework里需要引 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...