Create 和 Update 方法有 99% 的代码是相同的,你们会写成一个方法,然后判断吗?

func (Self *apiService) CreateApi(form *param.AppApiForm) error {
    err := Self.C.ValidateStruct(form)
    if err != nil {
        return err
    }
    apiExists := Self.Exists(form.AppId, form.Name, form.URL, "")
    if apiExists {
        return errors.New("相同的Api已经存在")
    }

    sApp := SApplication(Self.C)
    exists, _ := sApp.Detail(form.AppId)
    if exists.(*application.MApplication).Name == "" {
        return errors.New("应用不存在")
    }
    return Self.Insert(&form)
}

func (Self *apiService) UpdateApi(form *param.AppApiForm, id string) error {
    err := Self.C.ValidateStruct(form)
    if err != nil {
        return err
    }
    apiExists := Self.Exists(form.AppId, form.Name, form.URL, id) // 这里不同
    if apiExists {
        return errors.New("相同的Api已经存在")
    }

    sApp := SApplication(Self.C)
    exists, _ := sApp.Detail(form.AppId)
    if exists.(*application.MApplication).Name == "" {
        return errors.New("应用不存在")
    }

    _, err = Self.Update(&form, id)  // 这里不同
    return err
}

从代码里面能看到大篇幅的相同代码。你们都是怎么做的呢?

九九一十八,一步一个脚印
讨论数量: 3

相同的抽出来 然后给2个入口

func Create(params interface{}) {

    beforeCreateOrUpdate(params, "")
    //创建
}

func Update(params interface{}, id string) {
    beforeCreateOrUpdate(params, id)
    //插入
}

func beforeCreateOrUpdate(params interface{}, id string) interface{} {
    return params
}
3年前 评论
guoliang1994 (楼主) 3年前

一般我都是通过请求方式判断,创建是 post 更新应该是 patch 或者 put

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!