Go基础学习记录 - 编写Web应用程序 - 博客编辑功能之Model重构

栏目: Go · 发布时间: 6年前

内容简介:每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享针对于前面的几篇分享,觉的还是要勇于创新,发现更好的,更利于自己的,更能提高写代码效率的方式。于是将model这块的逻辑进行了重构之前的文章【

每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享

https://github.com/durban89/typescript_demo.git
tag: 1.1.3

针对于前面的几篇分享,觉的还是要勇于创新,发现更好的,更利于自己的,更能提高写代码效率的方式。于是将model这块的逻辑进行了重构

之前的文章【 Go基础学习记录 - 编写Web应用程序 - 博客编辑功能之Model的重新思考 】也算是实现了一部分功能,小区域的是没有问题,比如只是针对Blog这一个model是没有问题的,但是如果在创建一个是不是要重新再写一遍Create、Update、Delete等方式。

这个是很不方便的,在了解了创建一篇文章的时候大概就是需要添加、更新、删除、查询等功能的时候,其实应该写一个比较通用代码,具体需要更换的大概就是

数据要存储到哪张表,需要哪些字段,而且这些字段又都是变化的,不应该写死,而是由初始化的时候或者调用的时候来具体操作,这个就是目前 设计模式 中经常提到的,我不说大家也都知道,嘿嘿,我就不说,自己百度去。

有点类似于工厂模式

第一步、重新定义Model具体结构如下

// ModelMethod 接口
type ModelMethod interface {
    Query(offset int64, limit int64) (map[string]string, error)
    Create() (int64, error)
    Delete() (int64, error)
    Update() (int64, error)
    QueryOne(int64) (map[string]string, error)
}

// ModelProperty 属性
type ModelProperty struct {
    TableName string
}

// WhereCondition where条件
type WhereCondition struct {
    Operator string
    Value    string
}

// WhereValues where条件值
type WhereValues map[string]WhereCondition

// UpdateValues update条件值
type UpdateValues map[string]string

// InsertValues Insert值
type InsertValues map[string]string

// SelectValues select条件值
type SelectValues []string

目前做了一个简单规划,表名要有,查询的where条件能够支持比较稍微复杂的查询,同时update和select的字段也都做了具体的定义。下面看下QueryOne和Update功能

第二步、重新定义Model函数这里暂时主要是定义了Update的函数,其余几个也加了暂时未做测试,这里只拿实践过的进行分享

// Update 更新
func (p *ModelProperty) Update(update UpdateValues, where WhereValues) (int64, error) {
    var updateString = update.MergeUpdate()
    var whereString = where.MergeWhere()

    sql := fmt.Sprintf("UPDATE %s SET %s WHERE %s", tableName, updateString, whereString)
    // 这里的tableName是有调用者设置的,也就是我们一般说的继承者设置的

    stmt, err := Conn.Prepare(sql)
    if err != nil {
        return 0, err
    }

    res, err := stmt.Exec()
    if err != nil {
        return 0, err
    }

    affect, err := res.RowsAffected()
    if err != nil {
        return 0, err
    }

    return affect, nil
}

Tips这里的tableName是有调用者设置的,也就是我们一般说的继承者设置的

第三步、控制器调用修改

修改ArticleEdit函数

将更新部分

blogModel := &models.Blog{}
_, err := blogModel.Update(update, where)

替换为

var blogInstance models.BlogModel
_, err := blogInstance.Update(update, where)

重新编译后运行功能正常

项目更新地址

https://github.com/durban89/typescript_demo.git
tag: 1.1.4

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Powerful

Powerful

Patty McCord / Missionday / 2018-1-25

Named by The Washington Post as one of the 11 Leadership Books to Read in 2018 When it comes to recruiting, motivating, and creating great teams, Patty McCord says most companies have it all wrong. Mc......一起来看看 《Powerful》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具