1. 程式人生 > >學員會診之02:SVN協作以及Page類的設計

學員會診之02:SVN協作以及Page類的設計

三層架構的學生管理系統是我們第一個稍微大型的專案:分層、一個解決方案多個Project,所以值得我們停下來好好審查審查。

1.測試SVN伺服器地址

我們的作業要求學員建立自己的SVN伺服器,並且將程式碼commit上去,然後講師進行批改是從原始碼伺服器上獲取程式碼,繼而review。這非常類似於敏捷開發中的同行審查。在企業中,我們一般也是這樣做程式碼審查的。

既然要審查程式碼,那麼第一件事情就是要把程式碼從學生的伺服器上check out下來,所以我第一步就是找學生要劉同學的SVN伺服器地址以及使用者名稱、密碼,這次我們稽核的是另一位劉同學,如下:

上面圖示中,我打了一個叉叉和一個對勾。叉叉的地方是劉同學自己去SVN中copy地址出來的,然後我們要轉換成自己在區域網中的地址才行。

怎麼查自己的本機地址?記得回去敲cmd命令:ipconfig。如果你發現沒有此命令,記得要以管理員身份執行cmd。

緊接著,拿到劉同學的地址,首先測試下是否已經聯通,於是開啟瀏覽器,敲入地址,如下:

在這次連線中,我們發現劉同學在伺服器配置SVN的時候,使用的是https的協議,所以要點選上圖中的“高階”(PS:不同的瀏覽器設定形式不一樣)。

然後點選下圖中的繼續前往

出意外,會彈出使用者名稱和密碼框。這個使用者名稱和密碼是劉同學在SVN伺服器上專門為我設定的。

如果看到下圖,說明已經成功。

 

2.獲取單個專案原始碼

接下來,讓我們在eclipse中check out程式碼。

首先,點選import

選擇 Project from SVN

點選creat a new respository location

輸入地址。記住,這一步同時要輸入使用者名稱和密碼,然後,記得勾選Save authentication。

點選finish

接下來會問你是否信任連線,直接“Trust Always”,然後下一個頁面選擇Java Project

在接下來的這個頁面,我們要select resource,如下。注意,我們剛才獲取到的地址是:https://192.168.1.125:9443/svn/zuikc/。但是這裡有個問題,因為我們發現我們的專案是在這個地址的子檔案中,所以,我們要輸入全路徑,如下,

下一步,預設finish

然後,彈出這個介面,選擇Java Project

Next之後,讓我們輸入project name,如下

點選finish,這次是真的finish了。

 

3.獲取全部專案原始碼

在這個作業中,我要求大家將專案分成多個project。上面只是獲取最底層的bean。緊接著我們按照從下到上的次序依次獲取專案。

先common。Common下來後,你大概會看到一些錯誤

為什麼吶?

第一個原因,因為我們在common中用到了jdbc,所以,如果我們建立lib資料夾,將jdbc包引入進來,就會出現找不到包的情況;

第二個原因,即便引入,如果沒有正確匯入到build path中,也會出現錯誤。那怎麼修復?如下:

接著匯入dao,同樣,有可能碰到這樣的問題

重新引入jar包、common和bean吧,

接下來的幾個專案也類似哦。全部完畢後,是這樣的:

 

4.問題分析之Page類的設計

劉同學的程式碼完成度很高。不過還有一個小小的不完美的地方。我們可以看到在分頁這個部分,劉同學有意識的建立了一個Page類,現在來看看Page類長什麼樣:

package com.zuikc.usermanagement.dao;

public class Page {
    //設定每頁行數
    public static final int PAGE_SIZE = 5;
    //起始行號
    private int startRow;
    //總行數
    private int rows;
    //總頁數
    private int pages;
    //當前頁號
    private int currentPage;
    public int getStartRow() {
        return startRow;
    }
    public void setStartRow(int startRow) {
        this.startRow = startRow;
    }
    public int getRows() {
        return rows;
    }
    public void setRows(int rows) {
        this.rows = rows;
    }
    public int getPages() {
        return pages;
    }
    public void setPages(int pages) {
        this.pages = pages;
    }
    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

}

方向是對的,這裡確實得有一個Page類。

但是放錯了地方:

Page類它不應該是dao層的東西,而是一個特殊的bean。

為什麼說它特殊呢,接下來就要引入第二個問題了。Page類中缺少了東西。最重要的一個東西就是要包裝的型別的列表屬性,比如:List<User>。

為什麼要這個包裝屬性呢?我們可以看一下劉同學的service:

在劉同學的UserService的分頁查詢函式中,直接返回的是List<User>。但是,我們在上層呼叫的時候,除了獲取當前頁的資訊之後,一般還需要獲取:當前是第幾頁、每頁顯示多少條、總共多少頁這樣的資訊。你可能會說:簡單啊,上層針對這些屬性多呼叫幾個這樣的service方法不就行了?

行是行。但是上層在設計上只是負責顯示的,我們應該讓這些邏輯上的工作放置到service層中,也就是說:在呼叫queryUsersByPage的時候,應該將這些屬性一次性返回!那怎麼返回,要知道方法只能有一個返回值。沒辦法了,我們只能把這些屬性,連同List<User>封裝到一個類裡,比如Page裡返回。

於是,Page類變成了:

變化有:

1:Page跑到了bean;

2:Page增加了Users屬性;

緊接著問題又來了,那以後要是對老師分頁呢?難道增加一個teachers的屬性?

顯然不行!

有沒有更好的辦法?當然有,就是泛型。我們將屬性改為如下:

至此,我們的Page才成為了一個通用的Page類。

然後Service層修改為:

接下來,自己去修改整個page實現吧。

5.其它小問題

連線沒有及時關閉:

SQL注入漏洞:

 

6.提交批改

 

7.學生檢視批改

當然是update原始碼到本地了。

你也可以在history裡面看看我提交了批改沒有,檢視下吧:

 

華麗分割線

===========================================================

最課程JavaEE+網際網路分散式新技術開班進行中,來http://www.zuikc.com看看吧。你想參加不一樣的培訓班,並且一畢業就NB,那就來加入我們吧;

更多技術文章和開班資訊請加入,

QQ群:

相關推薦

學員會診02SVN協作以及Page設計

三層架構的學生管理系統是我們第一個稍微大型的專案:分層、一個解決方案多個Project,所以值得我們停下來好好審查審查。 1.測試SVN伺服器地址 我們的作業要求學員建立自己的SVN伺服器,並且將程式碼commit上去,然後講師進行批改是從原始碼伺服器上獲取程式碼,繼而review。這非常類似於敏捷開

學員會診04你為什麼找不到工作?

我有一段時間看到文同學和潘同學比較的窩火,明明學的也還不錯,卻老是跟我說找不到工作。 先說說文同學。文同學很有意思,剛畢業那會面試機會還蠻多,並且沒兩天還拿下一個offer:某個小軟體公司讓他去做架構師~~。當然他面試的職位是Java工程師,一下子沒發揮好,吹的太厲害了,對方直接讓他上來做架構師~~~。那他

學員會診01那些典型的面向物件錯誤

       我原本不想用“錯誤”二字。因為錯誤顯得太嚴重了,並且,軟體編碼本身就沒有對錯,只要你把功能實現了,剩下的就是思想流派的分歧。但這裡仍舊想用“錯誤”兩個字,因為本篇診斷所涉及的那些問題基本已經屬於當前軟體開發規則中的普適需要避免的。        注意,被診斷的學員並不是學的差的學員,相反,他有

學員會診03你那慘不忍睹的三層架構

        最近檢查作業,雖然我們反覆強調三層架構就是:表示層、業務邏輯層、資料訪問層,每個層只做自己應該做的事情,但是,部分同學的作業還是不理想啊~~~         你以為的三層架構是這樣的:         而實際上你的三層架構是這樣的:         如果我們尚不能完全瞭解把握各

Java全棧程序員02Ubuntu下Java環境安裝、配置、測試

配置文件 軟件 三方 shel class 系統配置文件 一件事 devel java10 在上文講完之後,我們手裏的ubuntu只能算是一個上網機,什麽也幹不了,本篇我們將折騰它為開發機。 這裏,我們這裏假定你對linux體系是初級選手,所以本篇會講的啰嗦一點,高手就出

開發環境git團隊協作git工作流與常用命令

此篇文章只是一篇傻瓜式的,記錄工作中比較規範且常見的一個git工作流需要用到的命令,讓你可以快速的開始工作。而不是一些長篇大論的理論知識,如果你有用過sourcetree或者其它圖形化工具,結合你正在使用的工具,敲這些命令,看圖形化工具中的變化,對比思考這些命令可能會更容易吸收。 1.基本配置 剛入職公司

Java全棧程式設計師02Ubuntu下Java環境安裝、配置、測試

在上文講完之後,我們手裡的ubuntu只能算是一個上網機,什麼也幹不了,本篇我們將折騰它為開發機。 這裡,我們這裡假定你對linux體系是初級選手,所以本篇會講的囉嗦一點,高手就出門左轉吧。 1.安裝 首先我們確定下我們安裝的Ubuntu系統是否已經安裝了java環境。 進入終端,敲入命令su,進

SoC嵌入式軟件架構設計代碼分塊(Bank)設計原則

post 介紹 讀寫 cor 層次 clas rom bank 分配 上一節講述了在沒有MMU的CPU(如80251、MIPS M控制器系列、ARM cortex m系列)上實現虛擬內存管理的集成硬件設計方法。新設計的內存管理管理單元要實現虛擬內存管理還須要

Effective C++筆記為多型基宣告virtual解構函式

應該為多型基類宣告virtual解構函式,否則容易造成記憶體洩露。 因為C++明白指出,當derived class物件經由一個base class指標被刪除,而該base class如果帶有一個non-virtual解構函式,其結果未定義一實際執行時通常發生的是物件的derived成分沒

前端bootstrap 好看漂亮的按鈕設計

  線上編輯: http://www.runoob.com/try/try.php?filename=bootstrap-button-example   線上圖示顏色引數快速獲取(點選按鈕獲取htme程式碼): http://www.runoob.com/t

Java多執行緒(二)Atomic原子變數與原子

一、何謂Atomic?  Atomic一詞跟原子有點關係,後者曾被人認為是最小物質的單位。計算機中的Atomic是指不能分割成若干部分的意思。如果一段程式碼被認為是Atomic,則表示這段程式碼在

C++學習第11章 使用

本次學習,知識點如下: 運算子過載 友元 過載<<運算子 類的自動轉換和強制轉換 類轉換函式 運算子過載 運算子過載格式, 如下所示: // op必現是有效的C++操作符,不能虛構一個新的操作符 ope

MyBatis由淺入深學習總結MyBatis解決Java實體和資料庫表字段不一致方法總結

在此,首先說明一點任何永續性框架都需要解決一個問題,那就是Java實體類的欄位一般來說基本上會與資料庫表中欄位不一致,那麼它們是如何解決的呢?咱們以Hibernate和SpringJDBC為例說明一下; 1、Hibernate中一般通過XML對映和註解的方式解決不一致問題,

基於大中臺架構的電商業務中臺最佳實踐交易中臺技術要點設計高效能

接著上篇繼續講,接下來主要介紹交易總體設計的技術要點設計,對於電商中臺來說,交易系統是核心中的核心,一開始就需要圍繞高效能,高可用,和高擴充套件三個方面來重點設計。本篇主要介紹高效能設計。 對於高效能的定義,通常可以理解為系統/服務介面響應時間低(rt)且併發量(qps,tps)高. 提

基於大中臺架構的電商業務中臺最佳實踐交易業務中臺核心設計

為什麼要用業務中臺化思想來架構交易系統 上一篇文章已經簡要介紹了交易業務中臺的設計理念,本篇會詳細的來說為何要用中臺的思想來架構交易系統。要說明白這個問題,我們必須回看系統的演化路徑是怎樣隨著業務規模的增長進行變化的。 首先來看初創公司/新業務系統是如何演進的;以基於雲端計算為基礎的架構模式

T4系列文章根據SqlServer生成實體

學習了前面三章的內容現在我們可以利用T4模板做一些小工具了,今天這裡要講的就是利用T4模板生成實體類。在寫這一部分的時候,我發現統一編碼格式是一件麻煩事,因為T4程式碼裡邊有“<##>”這樣的東西,試驗了幾種方法之後,我找到了一種稍微好點的,那就是把

在STM32上實現NTFS5GPT分區表的C語言實現(2)GPT實現以及統一方式讀取磁盤分區

tfs 下載 數據 特殊 dpt 屬性列表 handle 系統分區 成了   上一節實現了主GPT頭的信息提取,這一節繼續提取整個的GPT數據,並且將GPT分區表和MBR分區表兩種格式融合成一個模塊,使主調函數(也可以說是使用者)不需要關心磁盤的分區表類型:它太底層了,確實

課程作業02將課程中的所有動手動腦的問題以及課後實驗性的問題,整理成一篇文檔。

運算符 示例 turn 整理 .cn 輸出結果 ole 輸出 兩個 問題1:一個Java類文件中真的只能有一個公有類嗎?請使用Ecplise或javac檢測一下以下代碼,有錯嗎? 一個java類文件中只能有一個公有類。用Ecplise測試,當public類嵌套在publi

T4系列文章2T4工具簡介、調試以及T4運行原理(轉)

技術分享 animate 等了 edit uml 執行 為我 direct 感覺 出處:http://www.cnblogs.com/damonlan/archive/2012/01/12/2320429.html 一、前言 經過第一篇,我想大家現在對T4有了基本

Eclipse 02 安裝SVN插件

觀察 cli pda developer 文件夾 並且 clas border plugins 1、下載最新的Eclipse,我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版 如果沒有安裝的請到這裏下載安裝: