Java開發學習心得(三):項目結構

3 項目結構

通過前面一系列學習,差很少對Java的開發過程有了必定的瞭解,爲了能保持一個良好的項目結構,考慮到接下來要進行開發,還須要學習一下Java的項目結構css

下面以兩個項目結構爲參照html

圖1java

圖2web

第一個是我本身學習時的Demo,一邊學一邊建文件,應該有些錯誤的地方,第二張是從網上看到的一個結構比較清晰的圖片spring

圖1的結構完整一點,就以圖1爲主一點點講起數據庫

3.1 src

由於我用的是Maven,大方向上項目兩大文件夾分別是src和target,以及一個pom.xml配置文件,src目錄裏是項目工程的源碼文件,配置文件和資源文件等,其下一級是main和test這兩個文件夾segmentfault

3.1.1 main

main文件夾下是主要的工程源文件,而後下面又是兩個文件夾:java和resources,其實上面也講了,並且顧名思義,java裏面是源碼文件,resources裏面是資源文件網絡

3.1.1.1 java

這之下的文件結構能夠參考上面的圖2了,大致上就是model-mapper-service-controller,其餘還有公共類和表現層等,這裏在下面單獨分一個章節來講mybatis

3.1.1.2 resources

資源文件夾默認就是這個樣子,application.properties是用來填寫各類配置的,好比數據庫鏈接的配置信息、日誌組件的配置信息等,有些人會改爲yml後綴名,裏面的格式就不盡相同了,在前面也講過,這裏就再也不贅述。app

除此以外,各類組件的配置文件也在這個文件夾下

還有一個主要的做用是存放靜態文件資源,包括須要訪問的jsp、html、css、js、圖片等,還有代碼模板

  1. 項目配置文件:resources/application.yml
  2. 靜態資源目錄:resources/static/

    ——用於存放html、css、js、圖片等資源

  1. 視圖模板目錄:resources/templates/

    ——用於存放jsp、thymeleaf等模板文件

  1. mybatis映射文件:resources/mapper/(mybatis項目)
  2. mybatis配置文件:resources/mapper/config/(mybatis項目)

3.1.2 test

如題所述,單元測試用的

3.2 target

target是有存放項目構建後的文件和目錄,jar包、war包、編譯的class文件等

target裏的全部內容都是maven構建的時候生成的

jar 包就是 java archive file java 的一種文檔格式。jar文件很是相似zip

WAR是Sun提出的一種Web應用程序格式,與JAR相似,也是許多文件的一個壓縮包。這個包中的文件按必定目錄結構來組織:
一般其根目錄下包含有Html和Jsp文件或者包含這兩種文件的目錄,另外還會有一個WEB-INF目錄,這個目錄很重要。一般在WEB-INF目錄下有一個web.xml文件和一個classes目錄,web.xml是這個應用的配置文件,而classes目錄下則包含編譯好的Servlet類和Jsp或Servlet所依賴的其它類(如JavaBean)。

一般這些所依賴的類也能夠打包成JAR放到WEB-INF下的lib目錄下,固然也能夠放到系統的CLASSPATH中,但那樣移植和管理起來不方便

target裏的全部內容都是maven構建的時候生成的

4 Java的工程文件結構

傳統的三層不用再解釋了,在Java裏對應數據訪問層的是DAO,進行數據交互,對應業務邏輯層的是Service層,這裏寫邏輯代碼,而後就是UI層

4.1 幾種對象的解釋

上面提到DAO,這裏簡單說說一些相關的簡寫,在一些源碼裏看到了,初學時有點懵

  1. PO(persistant object): 持久對象,能夠當作是與數據庫中的表相映射的java對象。最簡單的PO就是對應數據庫中某個表中的一條記錄,多個記錄能夠用PO的集合。PO中應該不包含任何對數據庫的操做。實體
  2. VO(value object):值對象,一般用於業務層之間的數據傳遞,和PO同樣也是僅僅包含數據而已。但應是抽象出的業務對象,能夠和表對應,也能夠不,這根據業務的須要。可能就是Get/Set?
  3. DAO(Data Access Object):數據訪問對象,用於訪問數據庫,裏面包含對數據庫的各類操做,配合VO進行CRUD
  4. DTO(Data Transfer Object):數據傳輸對象,是一組須要跨進程或網絡邊界傳輸的聚合數據的簡單容器。它不該該包含業務邏輯,並將其行爲限制爲諸如內部一致性檢查和基本驗證之類的活動。我一開始覺得是業務實體,可是看說明不是一個東西,那個是BO。

DTO的用法:
好比咱們一張表有100個字段,那麼對應的PO就有100個屬性。可是咱們界面上只要顯示10個字段,客戶端用WEB service來獲取數據,沒有必要把整個PO對象傳遞到客戶端,這時咱們就能夠用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端之後,若是用這個對象來對應界面顯示,那此時它的身份就轉爲VO。DTO還有減小請求的次數、簡化傳輸對象、避免代碼重複等做用。

  1. ORM(O/R Mapping,Object Relational Mapping):對象關係映射

4.2 實際的項目文件應該如何設計

能夠參考圖2

  1. bean也就是實體了,對應數據庫的字段
  2. DAO,前面也說過了,不過裏面寫法能夠細分不少種,使用Mybatis就是Mapper接口文件或者是xml的寫法,若是還使用了JPA,還會有個repository類文件
  3. Service,這塊好像寫法的爭議比較多,能夠看看這篇文章有多少人在濫用 service+serviceImpl,又有多少人在誤用myBatis

我在不少地方都看到了一個ServiceImpl接口,一個service類的寫法,一直不理解爲何要屢次一舉,但仍是照着作了,上面那篇文章裏說到這是一種過期的寫法,使用接口文件是爲了解決可能鏈接各類數據庫而有多個數據訪問層的問題,這樣只須要實現對應的結構就好了,而有了Mybatis以後這種問題就不存在了,因此不須要再寫impl接口文件,使用 service+dao+mapper.xml 是一種更好的選擇

  1. Controller,這裏只討論MVC了,普通java web的寫法還不會,而後從controller應該就直接到資源文件裏的HTML頁面了
  2. 上面是按順序自下而上的,除此以外一些公共層:工具類庫(utils)、配置類(config)、數據傳輸對象(dto)、視圖包裝對象(vo)

還能夠看看這篇spring boot 項目開發經常使用目錄結構

相關文章
相關標籤/搜索