本文所有代码为golang
S - 单一职责原则
Single Responsibility Principle,简称SRP。即指,一个类只做且只能做一件事。
例:现在需要从网络上获取一些 JSON 数据,然后解析它,并把结果保存在本地文件中。
思路:
第 1 个类应该只处理网络。我们给它提供一个 URL,然后接收 JSON 数据或者在出现问题时,收到一个错误信息。
第 2 个类应该只解析它接收到的 JSON 数据并以相应的格式返回结果。
第 3 个类应该以相应的格式接收 JSON 数据,并把它保存在本地文件中。
完整代码如下:
package main
import (
"encoding/json"
"io"
"io/ioutil"
"log"
"net/http"
)
type response struct {
Error err `json:"error"`
}
type err struct {
Message string `json:"message"`
Code int `json:"code"`
Name string `json:"name"`
}
const (
link = "https://www.zhihu.com/api/v4/answer_later/count"
)
// 第一个类
func getResult(url string) (io.Reader, error) {
res, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
return res.Body, nil
}
// 第二个类
func parseJSON(result io.Reader) (response, error) {
var resp response
err := json.NewDecoder(result).Decode(&resp)
if err != nil {
return response{}, err
}
return resp, nil
}
// 第三个类
func storeToFile(resp response) {
rs, err := json.Marshal(resp)
if err != nil {
log.Fatal(err)
}
err = ioutil.WriteFile("jsonFile.json", rs, 0644)
if err != nil {
log.Fatal(err)
}
}
func main() {
reader, err := getResult(link)
if err != nil {
log.Fatal(err)
}
resp, err := parseJSON(reader)
if err != nil {
log.Fatal(err)
}
storeToFile(resp)
}
O - 开闭原则
Open-Closed Principle,简称 OCP。类应该对扩展开放,对修改关闭
有疑问加站长微信联系(非本文作者)