# M層
services/klass.js
```
// 注入klass
.controller('KlassEditCtrl', function($scope, config, teacher, $routeParams, klass) {
...
// 更新
var update = function (klass, callback) {
server.http({
method:'POST',
url: '/klass.Update.json',
data: klass
}, function(response) {
callback(response);
});
};
...
// Public API here
return {
// 獲取全部教師信息
paginate: function(name, page, pageSize, callback) {
return paginate(name, page, pageSize, callback);
},
save: save,
get: get,
update: update
};
...
```
# 單元測試
test/..../klass.js
```
...
// 增加GET的測試
url = config.apiRootPath + '/klass.Get.json?id=1';
$httpBackend.when('GET', url).respond(data);
// 增加update測試
url = config.apiRootPath + '/klass.Update.json';
$httpBackend.when('POST', url).respond(data);
}));
...
// 調用UPDATE
klass.update({}, function(){
console.log('klass update 通過');
});
// 模擬數據請求
$httpBackend.flush();
...
```
## 控制臺
```
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 11 of 15 SUCCESS (0 secs / 0.068 secsLOG: 'klass get 通過'
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 11 of 15 SUCCESS (0 secs / 0.068 secsLOG: 'klass update 通過'
```
# C層對接
edit.js
```
// 數據提交
var submit = function() {
klass.update($scope.klass, function(response){
if (!angular.equals({}, response.errors)) {
// 發生錯誤
$scope.errors = response.errors;
$scope.isError = true; // 發生錯誤
$scope.message = ''; // 清空消息
} else {
// 添加成功
$scope.message = '更新成功';
$scope.isError = false;
}
});
};
```
## 測試:

- README
- 第一章:準備
- 第二章:Hello World!
- 第一節:查看工程文件
- 第二節:JDK、JRE與環境變量
- 第三節:index.jsp
- 第三章:Hello Struts
- 第一節:Web.xml
- 第二節:單入口
- 第三節:Hello Struts
- 第四節:觸發C層
- 第四章:建立數據表
- 第一節:建立實體類
- 第二節:測試一
- 第三節:測試二
- 第四節:引入Hibernate
- 第五節:配置Hibernate
- 第六節:建立連接
- 第七節:實體類映射數據表
- 第八節:完善數據表
- 第五章:教師管理
- 第一節:增加數據--add
- 第二節:增加數據--save
- 1 獲取傳入數據數據
- 2 數據寫入測試
- 3 對接C層
- 第三節:數據列表
- 1 獲取數據
- 2 重構代碼
- 3 C層對接--初始化
- 4 C層添加數據
- 5 V層顯示數據
- 6 獲取數據庫中數據
- 7 顯示性別
- 8 分頁
- 9 條件查詢
- 第四節:修改數據
- 1 edit
- 2 update
- 第五節:刪除數據
- 第六節:總結
- 第六章:重構C層
- 第一節:繼承ActionSupport類
- 第二節:數據驗證
- 第七章:前臺分離(前臺)
- 第一節:環境搭建
- 第二節:運行環境
- 第三節:共享開發環境
- 第四節:生產環境
- 第八章:前臺開發(前臺)
- 第一節:本地化
- 第二節:教師列表
- 1 引入M層
- 2 模擬后臺返回數據
- 3 C與M對接
- 4 C與V對接
- 第九章:前后臺對接(前后臺)
- 第一節:后臺輸出json(后臺)
- 第二節:對接前臺(全棧)
- 第二節:對接API(前臺)
- 第二節:跨域請求(后臺)
- 第三節:重構代碼(前臺)
- 第十章:重構后臺M層
- 第一節:數據訪問DAO層
- 第二節:項目整體重構
- 第十一章:用戶登陸(前后臺)
- 第一節:制定規范
- 第二節:定制測試用例
- 第三節:后臺輸入測試代碼(后臺)
- 第四節:postman(后臺)
- 第五節:新建用戶登陸模塊(前臺)
- 第六節:代碼重構(前臺)
- 第十二章:班級管理(前后臺)
- 第一節:班級列表
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第二節:Add
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第三節:Save
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第四節:Edit
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第五節:Update
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第六節:Delete
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第七節:小結
- 第十三章:班級管理(API)
- 第一節:ER圖
- 第二節:create
- 1 實體層
- 2 dao層
- 3 service(server)層
- 4 action層
- 第三節:ManyToOne
- 第四節:Read
- 1 service(server)層
- 2 action層
- 第五節:update
- 1 service(server)層
- 2 action層
- 第六節:update
- 第十四章:重構服務層