一 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. React + Springboot + Quartz,从0实现Excel报表自动化

    一.项目背景 企业日常工作中需要制作大量的报表,比如商品的销量.销售额.库存详情.员工打卡信息.保险报销.办公用品采购.差旅报销.项目进度等等,都需要制作统计图表以更直观地查阅.但是报表的制作往往需要 ...

  2. Mysql 用户远程登录数据库

    其实这个技术不难.我只是站在巨人的肩膀上.梳理一下我遇见的问题. 方法有两种.修改当前用户的host 为 %.或者直接授权(推荐) 直接授权: # mysql -u root -proot  // 登 ...

  3. 齐博X1-栏目的调用1

    本节来说明下系统提供的几个栏目调用的方法 一节我们制作了一个公共导航,本节我们在首页index中演示下栏目的相关调用 至于其他的数据内容,参考第二季的标签调用即可,直接{qb:tag}调用就可以调用出 ...

  4. python关于Django搭建简单博客项目(教程)

    由于csdn各种django blog博文都有或多或少的bug,所以我决定自己写一篇,先附上教程,详解在另一篇博文里,为了便于大家复制粘贴,本文代码尽量不使用图片. 源代码及解析文章请在我的githu ...

  5. Ubuntu安装Docker及镜像加速器

    一.安装Docker sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificate ...

  6. 怎么实现无痛刷新token

    最近遇到这个需求,前端登录后,后端返回  access_token 和 refresh_token ,当token 过期时用旧的 refresh_token 去获取新的token,前端要不痛去刷新to ...

  7. PXE批量装windows(半自动版本)

    一.  环境说明: 客户端:CPU:双核 内存:4GB 内存 80GB   ip地址:DHCP 服务端1:CPU:双核 内存:1GB 内存 20GB   ip地址:192.168.40.254     ...

  8. java学习之爬虫

    0x00前言 对比与Python的爬虫机制和java的爬虫机制来详解一下java的爬虫,对于一般性的需求无论java还是python都可以胜任. 如需要模拟登陆.对抗防采集选择python更方便些,如 ...

  9. 【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存

    问题描述 在使用Azure Event Hub的SDK时候,常规情况下,发现示例代码中并没有SDK内部的日志输出.因为在Java项目中,没有添加 SLF4J 依赖,已致于在启动时候有如下提示: SLF ...

  10. AtCoder Beginner Contest 277 题解

    掉大分力(悲 A - ^{-1} 直接模拟. #include<bits/stdc++.h> #define IOS ios::sync_with_stdio(false) #define ...