一 domain层介绍说明

  • domain层专注于数据库数据领域开发,我们把数据库相关操作全部写在domain层。

  • model层:数据表字段定义与开发

  • repository层:数据库数据CURD操作

  • service层:数据库相关业务操作

  • 对于复杂的业务操作,这样可以使业务逻辑更加清晰,有利于后期开发与维护。

二 model层开发

  • 在model目录下新建 user.go 文件
package model

import (
"time"
) type User struct {
//主键
ID int64 `gorm:"primary_key;not_null;auto_increment" json:"id"`
UserID int64 `gorm:"unique_index;not_null" json:"user_id"`
UserName string `gorm:"unique_index;not_null" json:"username"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
PassWord string `json:"password"`
Permission int64 `json:"permission"`
CreateDate time.Time `json:"create_date"`
UpdateDate time.Time `json:"update_date"`
IsActive int64 `json:"is_active"`
Email string `json:"email"`
}

三 repository层开发

  • 在repository层开发目录下新建 user_repository.go 文件

  • repository层包含功能:

    1. InitTable 初始化数据表

    2. FindUserByName 根据用户名称查找用户信息

    3. FindUserByID 根据用户ID查找用户信息

    4. CreateUser 创建用户

    5. DeleteUserByID 根据用户ID删除用户

    6. UpdateUser 更新用户信息

    7. FindAll 查找所有用户

    8. ResetPwd 重置密码

    9. GetPermission 获取权限

    10. UpdatePermission 修改权限

    11. EnableUser 启用账号

    12. DisableUser 禁用账号

package repository

import (
"account/domain/model"
"github.com/jinzhu/gorm"
) type IUserRepository interface {
// InitTable 初始化数据表
InitTable() error
// FindUserByName 根据用户名称查找用户信息
FindUserByName(string) (*model.User, error)
// FindUserByID 根据用户ID查找用户信息
FindUserByID(int64) (*model.User, error)
// CreateUser 创建用户
CreateUser(*model.User) (int64, error)
// DeleteUserByID 根据用户ID删除用户
DeleteUserByID(int64) error
// UpdateUser 更新用户信息
UpdateUser(*model.User) error
// FindAll 查找所有用户
FindAll() ([]model.User, error)
// ResetPwd 重置密码
ResetPwd(int64, string) error
// GetPermission 获取权限
GetPermission(int64) (int64, error)
// UpdatePermission 修改权限
UpdatePermission(int64, int64) error
// EnableUser 启用账号
EnableUser(int64) error
// DisableUser 禁用账号
DisableUser(int64) error
} // NewUserRepository 创建UserRepository
func NewUserRepository(db *gorm.DB) IUserRepository {
return &UserRepository{mysqlDb: db}
} type UserRepository struct {
mysqlDb *gorm.DB
} // InitTable 初始化表
func (u *UserRepository) InitTable() error {
return u.mysqlDb.CreateTable(&model.User{}).Error
} // FindUserByName 根据用户名称查找用户信息
func (u *UserRepository) FindUserByName(name string) (user *model.User, err error) {
user = &model.User{}
return user, u.mysqlDb.Where("username=?", name).Find(user).Error
} // FindUserByID 根据用户ID查找用户信息
func (u *UserRepository) FindUserByID(userID int64) (user *model.User, err error) {
user = &model.User{}
return user, u.mysqlDb.Where("user_id=?", userID).Find(user).Error
} // CreateUser 创建用户
func (u *UserRepository) CreateUser(user *model.User) (userID int64, err error) {
return user.ID, u.mysqlDb.Create(user).Error
} // DeleteUserByID 删除用户
func (u *UserRepository) DeleteUserByID(userID int64) error {
return u.mysqlDb.Where("user_id=?", userID).Delete(&model.User{}).Error
} // UpdateUser 更新用户信息
func (u *UserRepository) UpdateUser(user *model.User) error {
return u.mysqlDb.Model(user).Update(&user).Error
} // FindAll 查找所有用户
func (u *UserRepository) FindAll() (userAll []model.User, err error) {
return userAll, u.mysqlDb.Find(&userAll).Error
} // ResetPwd 重置密码
func (u *UserRepository) ResetPwd(userID int64, Pwd string) error {
return u.mysqlDb.Where("user_id=?",userID).Update(model.User{PassWord:Pwd}).Error
} // GetPermission 获取权限
func (u *UserRepository) GetPermission(userID int64) (Permission int64, err error) {
var user model.User
return user.Permission,u.mysqlDb.Where("user_id=?",userID).Find(user).Error
} // UpdatePermission 修改权限
func (u *UserRepository) UpdatePermission(userID int64, Permission int64) error {
return u.mysqlDb.Where("user_id=?",userID).Update(model.User{Permission:Permission}).Error
} // EnableUser 启用账号
func (u *UserRepository) EnableUser(userID int64) error {
return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 1}).Error
} // DisableUser 禁用账号
func (u *UserRepository) DisableUser(userID int64) error {
return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 0}).Error
}

四 service层开发

  • 在service目录下新建 user_service.go 文件

  • service层包含功能:

    1. AddUser 插入用户

    2. DeleteUser 删除用户

    3. UpdateUser 更新用户

    4. FindUserByName 根据用户名称查找用户信息

    5. FindUserByID 根据用户ID查找用户信息

    6. CheckPwd 比对账号密码是否正确

    7. ResetPwd 重置密码

    8. GetPermission 获取权限

    9. UpdatePermission 修改权限

    10. EnableUser 启用账号

    11. DisableUser 禁用账号

package service

import (
"account/domain/model"
"account/domain/repository"
"errors"
"golang.org/x/crypto/bcrypt"
) type IUserService interface {
// AddUser 插入用户
AddUser(user *model.User) (int64, error)
// DeleteUser 删除用户
DeleteUser(int64) error
// UpdateUser 更新用户
UpdateUser(user *model.User, isChangePwd bool) (err error)
// FindUserByName 根据用户名称查找用户信息
FindUserByName(string) (*model.User, error)
// FindUserByID 根据用户ID查找用户信息
FindUserByID(int64) (*model.User, error)
// CheckPwd 比对账号密码是否正确
CheckPwd(userName string, pwd string) (isOk bool, err error)
// ResetPwd 重置密码
ResetPwd(int64, string) error
// GetPermission 获取权限
GetPermission(int64) (int64, error)
// UpdatePermission 修改权限
UpdatePermission(int64, int64) error
// EnableUser 启用账号
EnableUser(int64) error
// DisableUser 禁用账号
DisableUser(int64) error
} // NewUserService 创建实例
func NewUserService(userRepository repository.IUserRepository) IUserService {
return &UserService{UserRepository: userRepository}
} type UserService struct {
UserRepository repository.IUserRepository
} // GeneratePassword 加密用户密码
func GeneratePassword(userPassword string) ([]byte, error) {
return bcrypt.GenerateFromPassword([]byte(userPassword), bcrypt.DefaultCost)
} // ValidatePassword 验证用户密码
func ValidatePassword(userPassword string, hashed string) (isOk bool, err error) {
if err = bcrypt.CompareHashAndPassword([]byte(hashed), []byte(userPassword)); err != nil {
return false, errors.New("密码比对错误")
}
return true, nil
} // AddUser 插入用户
func (u *UserService) AddUser(user *model.User) (userID int64, err error) {
pwdByte, err := GeneratePassword(user.PassWord)
if err != nil {
return user.ID, err
}
user.PassWord = string(pwdByte)
return u.UserRepository.CreateUser(user)
} // DeleteUser 删除用户
func (u *UserService) DeleteUser(userID int64) error {
return u.UserRepository.DeleteUserByID(userID)
} // UpdateUser 更新用户
func (u *UserService) UpdateUser(user *model.User, isChangePwd bool) (err error) {
if isChangePwd {
pwdByte, err := GeneratePassword(user.PassWord)
if err != nil {
return nil
}
user.PassWord = string(pwdByte)
}
return u.UserRepository.UpdateUser(user)
} // FindUserByName 根据用户名称查找用户信息
func (u *UserService) FindUserByName(userName string) (user *model.User, err error) {
return u.UserRepository.FindUserByName(userName)
} // FindUserByID 根据用户名称查找用户信息
func (u *UserService) FindUserByID(userId int64) (user *model.User, err error) {
return u.UserRepository.FindUserByID(userId)
} // CheckPwd 比对账号密码是否正确
func (u *UserService) CheckPwd(userName string, pwd string) (isOk bool, err error) {
user, err := u.UserRepository.FindUserByName(userName)
if err != nil {
return false, err
}
return ValidatePassword(pwd, user.PassWord)
} // ResetPwd 重置密码
func (u *UserService) ResetPwd(userID int64, pwd string) error {
return u.UserRepository.ResetPwd(userID,pwd)
} // GetPermission 获取权限
func (u *UserService) GetPermission(userID int64) (permission int64, err error) {
return u.UserRepository.GetPermission(userID)
} // UpdatePermission 修改权限
func (u *UserService) UpdatePermission(userID int64, permission int64) error {
return u.UserRepository.UpdatePermission(userID,permission)
} // EnableUser 启用账号
func (u *UserService) EnableUser(userID int64) error {
return u.UserRepository.EnableUser(userID)
} // DisableUser 禁用账号
func (u *UserService) DisableUser(userID int64) error {
return u.UserRepository.DisableUser(userID)
}

五 最后

  • 至此,go-micro微服务domain层开发工作就正式完成。

  • 接下来就开始consul配置、注册中心的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击

(5)go-micro微服务domain层开发的更多相关文章

  1. 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。

    微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...

  2. 基于DDD的微服务设计和开发实战

    你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴 ...

  3. 驱动领域DDD的微服务设计和开发实战

    你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴 ...

  4. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  5. [Abp vNext微服务实践] - 业务开发

    前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...

  6. Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud

  7. 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见

    微服务与敏捷开发(Scrum/Kanban)的核心思想之我见   关于"微服务"和"敏捷开发"的文章网络上有很多,所以这里不再重复叙述这些概念的解释和特点,而是 ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  10. Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

随机推荐

  1. Linux 下配置 hosts 并设置免密登录

    Linux 下配置 hosts 并设置免密登录 作者:Grey 原文地址: 博客园:Linux 下配置 hosts 并设置免密登录 CSDN:Linux 下配置 hosts 并设置免密登录 说明 实现 ...

  2. 面向对象day1,创建类和对象时,对象内存是在哪

    上面我创建了两个类,一个是测试类,在测试包里面,一个是生产类,在src文件里面.可以看到,调用类里面的对象的时候需要先创建一个对象,然后通过对象来调用类里面的属性和方法等,但是这个时候我得先记录一下, ...

  3. Windows docker环境安装

    前期准备 1.hyper-v功能 win10家庭版没有提供hyper-v的问题可通过如下脚本解决,保存为bat并运行重启电脑即可. pushd "%~dp0" dir /b %Sy ...

  4. Doris开发手记4:倍速性能提升,向量化导入的性能调优实践

    最近居家中,对自己之前做的一些工作进行总结.正好有Doris社区的小伙伴吐槽向量化的导入性能表现并不是很理想,就借这个机会对之前开发的向量化导入的工作进行了性能调优,取得了不错的优化效果.借用本篇手记 ...

  5. DevOps|从特拉斯辞职风波到研发效能中的不靠谱人干的荒唐事

    今天发生了一件大事特拉斯辞任英国首相,我想借着这件事情说下我看到的一件研发效能的荒唐事,这其中的关联也许就是「都用了不靠谱的人」. 两件事情 今儿一早就听到,2022年10月20日英国第78任首相伊丽 ...

  6. 学习ASP.NET Core Blazor编程系列八——数据校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. 人人都懂的HTML基础知识-HTML教程(1)

    01.HTML基础简介 HTML (HyperText Markup Language,超文本标记语言) 不是一门编程语言,而是一种用于定义内容结构的标记语言,用来描述网页内容,文件格式为.html. ...

  8. jenkins集成基于maven的javaweb项目,部署到docker容器中

    使用开源工具:Jenkins,码云gitee,docker,docker页面管理工具PortainerUI,github 各种工具的安装就不必介绍了,首先打开Jenkins,刚安装完Jenkins,可 ...

  9. python深拷贝、浅拷贝

      .copy() 浅拷贝 如上图 定义列表A指向一个元素,列表A里面嵌套两层列表分布指向两个元素,定义列表B,列表B=A,列表C浅拷贝列表A 从图上可以看出,列表A和列表B指向的是同一个列表元素,而 ...

  10. letcode-学习-数组去重

    数组去重 问题描述: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 . 由于在某些语言中不 ...