第三节:先画图、后编程
作为初学者,我们的开发,往往是这样的,在心中画好了时序图,然后开始编码。如果你也是这个习惯,那么足以证明你就是我刚刚描述的初学者。但有些小的项目,只有简单的CRUD
,所以我们排斥画图,这也是可以理解的。我的做法是这样:
- 在纸上画功能实现的时序图.
- 按时序图编码.
- 将java文件转化为类图文件.
- 在软件中使用转换好的类图文件画出时序图.
是的,在教程中我也是这么做的。
时序图
类图
建立接口
package com.mengyunzhi.service;
import com.mengyunzhi.repository.Klass;
/**
* Created by panjie on 17/4/7.
*/
public interface KlassService {
Klass add(String name, Long teacherId);
Klass get(Long id);
void delete(Long id);
Klass update(Long id, String name, Long teacherId);
}
创建实现类
package com.mengyunzhi.service;
import com.mengyunzhi.repository.Klass;
/**
* Created by panjie on 17/4/13.
*/
public class KlassServiceImpl implements KlassService {
@Override
public Klass save(String name, Long teacherId) {
return null;
}
@Override
public Klass get(Long id) {
return null;
}
@Override
public void delete(Long id) {
}
@Override
public Klass update(Long id, String name, Long teacherId) {
return null;
}
}
创建C层
package com.mengyunzhi.controller;
import com.mengyunzhi.repository.Klass;
import com.mengyunzhi.service.KlassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* Created by panjie on 17/4/13.
*/
@RestController
@RequestMapping("/klass")
public class KlassController {
@Autowired
private KlassService klassService;
@PostMapping("/")
public Klass save(@RequestParam String name, @RequestParam Long teacherId) {
return klassService.save(name, teacherId);
}
@GetMapping("/{id}")
public Klass get(@PathVariable Long id) {
return klassService.get(id);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) {
klassService.delete(id);
return;
}
@PutMapping("/{id}")
public Klass update(
@PathVariable Long id,
@RequestParam String name,
@RequestParam Long teacherId) {
return klassService.update(id, name, teacherId);
}
}
让我们共同复习一遍各个请求方式默认对应的操作:
POST | 数据增加 |
GET | 数据查询 |
DELETE | 数据删除 |
PUT | 数据更新 |
PATCH | 数据更新(部分字段) |
总结
我们由时序图总结中类图,并使用astah
及idea
将图表(java
代码)快速的转化(逆向转化)成了java
代码(图表)。