SOLID原则

冉黛玉 · · 462 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文所有代码为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。类应该对扩展开放,对修改关闭


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:冉黛玉

查看原文:SOLID原则

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

462 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传