第三节:先画图、后编程

作为初学者,我们的开发,往往是这样的,在心中画好了时序图,然后开始编码。如果你也是这个习惯,那么足以证明你就是我刚刚描述的初学者。但有些小的项目,只有简单的CRUD,所以我们排斥画图,这也是可以理解的。我的做法是这样:

  • 在纸上画功能实现的时序图.
  • 按时序图编码.
  • 将java文件转化为类图文件.
  • 在软件中使用转换好的类图文件画出时序图.

是的,在教程中我也是这么做的。

时序图

/SpringMVC/assets/image/chapter3/14.png /SpringMVC/assets/image/chapter3/15.png /SpringMVC/assets/image/chapter3/16.png /SpringMVC/assets/image/chapter3/17.png

类图

/SpringMVC/assets/image/chapter3/18.png

建立接口

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 数据更新(部分字段)

总结

我们由时序图总结中类图,并使用astahidea将图表(java代码)快速的转化(逆向转化)成了java代码(图表)。