go-micro微服務(wù)domain層開(kāi)發(fā)示例詳解
一 domain層介紹說(shuō)明
- domain層專(zhuān)注于數(shù)據(jù)庫(kù)數(shù)據(jù)領(lǐng)域開(kāi)發(fā),我們把數(shù)據(jù)庫(kù)相關(guān)操作全部寫(xiě)在domain層。
- model層:數(shù)據(jù)表字段定義與開(kāi)發(fā)
- repository層:數(shù)據(jù)庫(kù)數(shù)據(jù)CURD操作
- service層:數(shù)據(jù)庫(kù)相關(guān)業(yè)務(wù)操作
- 對(duì)于復(fù)雜的業(yè)務(wù)操作,這樣可以使業(yè)務(wù)邏輯更加清晰,有利于后期開(kāi)發(fā)與維護(hù)。
二 model層開(kāi)發(fā)
- 在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層開(kāi)發(fā)
在repository層開(kāi)發(fā)目錄下新建 user_repository.go 文件
repository層包含功能:
- InitTable 初始化數(shù)據(jù)表
- FindUserByName 根據(jù)用戶(hù)名稱(chēng)查找用戶(hù)信息
- FindUserByID 根據(jù)用戶(hù)ID查找用戶(hù)信息
- CreateUser 創(chuàng)建用戶(hù)
- DeleteUserByID 根據(jù)用戶(hù)ID刪除用戶(hù)
- UpdateUser 更新用戶(hù)信息
- FindAll 查找所有用戶(hù)
- ResetPwd 重置密碼
- GetPermission 獲取權(quán)限
- UpdatePermission 修改權(quán)限
- EnableUser 啟用賬號(hào)
- DisableUser 禁用賬號(hào)
package repository
import (
"account/domain/model"
"github.com/jinzhu/gorm"
)
type IUserRepository interface {
// InitTable 初始化數(shù)據(jù)表
InitTable() error
// FindUserByName 根據(jù)用戶(hù)名稱(chēng)查找用戶(hù)信息
FindUserByName(string) (*model.User, error)
// FindUserByID 根據(jù)用戶(hù)ID查找用戶(hù)信息
FindUserByID(int64) (*model.User, error)
// CreateUser 創(chuàng)建用戶(hù)
CreateUser(*model.User) (int64, error)
// DeleteUserByID 根據(jù)用戶(hù)ID刪除用戶(hù)
DeleteUserByID(int64) error
// UpdateUser 更新用戶(hù)信息
UpdateUser(*model.User) error
// FindAll 查找所有用戶(hù)
FindAll() ([]model.User, error)
// ResetPwd 重置密碼
ResetPwd(int64, string) error
// GetPermission 獲取權(quán)限
GetPermission(int64) (int64, error)
// UpdatePermission 修改權(quán)限
UpdatePermission(int64, int64) error
// EnableUser 啟用賬號(hào)
EnableUser(int64) error
// DisableUser 禁用賬號(hào)
DisableUser(int64) error
}
// NewUserRepository 創(chuàng)建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 根據(jù)用戶(hù)名稱(chēng)查找用戶(hù)信息
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 根據(jù)用戶(hù)ID查找用戶(hù)信息
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 創(chuàng)建用戶(hù)
func (u *UserRepository) CreateUser(user *model.User) (userID int64, err error) {
return user.ID, u.mysqlDb.Create(user).Error
}
// DeleteUserByID 刪除用戶(hù)
func (u *UserRepository) DeleteUserByID(userID int64) error {
return u.mysqlDb.Where("user_id=?", userID).Delete(&model.User{}).Error
}
// UpdateUser 更新用戶(hù)信息
func (u *UserRepository) UpdateUser(user *model.User) error {
return u.mysqlDb.Model(user).Update(&user).Error
}
// FindAll 查找所有用戶(hù)
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 獲取權(quán)限
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 修改權(quán)限
func (u *UserRepository) UpdatePermission(userID int64, Permission int64) error {
return u.mysqlDb.Where("user_id=?",userID).Update(model.User{Permission:Permission}).Error
}
// EnableUser 啟用賬號(hào)
func (u *UserRepository) EnableUser(userID int64) error {
return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 1}).Error
}
// DisableUser 禁用賬號(hào)
func (u *UserRepository) DisableUser(userID int64) error {
return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 0}).Error
}
四 service層開(kāi)發(fā)
在service目錄下新建 user_service.go 文件
service層包含功能:
- AddUser 插入用戶(hù)
- DeleteUser 刪除用戶(hù)
- UpdateUser 更新用戶(hù)
- FindUserByName 根據(jù)用戶(hù)名稱(chēng)查找用戶(hù)信息
- FindUserByID 根據(jù)用戶(hù)ID查找用戶(hù)信息
- CheckPwd 比對(duì)賬號(hào)密碼是否正確
- ResetPwd 重置密碼
- GetPermission 獲取權(quán)限
- UpdatePermission 修改權(quán)限
- EnableUser 啟用賬號(hào)
- DisableUser 禁用賬號(hào)
package service
import (
"account/domain/model"
"account/domain/repository"
"errors"
"golang.org/x/crypto/bcrypt"
)
type IUserService interface {
// AddUser 插入用戶(hù)
AddUser(user *model.User) (int64, error)
// DeleteUser 刪除用戶(hù)
DeleteUser(int64) error
// UpdateUser 更新用戶(hù)
UpdateUser(user *model.User, isChangePwd bool) (err error)
// FindUserByName 根據(jù)用戶(hù)名稱(chēng)查找用戶(hù)信息
FindUserByName(string) (*model.User, error)
// FindUserByID 根據(jù)用戶(hù)ID查找用戶(hù)信息
FindUserByID(int64) (*model.User, error)
// CheckPwd 比對(duì)賬號(hào)密碼是否正確
CheckPwd(userName string, pwd string) (isOk bool, err error)
// ResetPwd 重置密碼
ResetPwd(int64, string) error
// GetPermission 獲取權(quán)限
GetPermission(int64) (int64, error)
// UpdatePermission 修改權(quán)限
UpdatePermission(int64, int64) error
// EnableUser 啟用賬號(hào)
EnableUser(int64) error
// DisableUser 禁用賬號(hào)
DisableUser(int64) error
}
// NewUserService 創(chuàng)建實(shí)例
func NewUserService(userRepository repository.IUserRepository) IUserService {
return &UserService{UserRepository: userRepository}
}
type UserService struct {
UserRepository repository.IUserRepository
}
// GeneratePassword 加密用戶(hù)密碼
func GeneratePassword(userPassword string) ([]byte, error) {
return bcrypt.GenerateFromPassword([]byte(userPassword), bcrypt.DefaultCost)
}
// ValidatePassword 驗(yàn)證用戶(hù)密碼
func ValidatePassword(userPassword string, hashed string) (isOk bool, err error) {
if err = bcrypt.CompareHashAndPassword([]byte(hashed), []byte(userPassword)); err != nil {
return false, errors.New("密碼比對(duì)錯(cuò)誤")
}
return true, nil
}
// AddUser 插入用戶(hù)
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 刪除用戶(hù)
func (u *UserService) DeleteUser(userID int64) error {
return u.UserRepository.DeleteUserByID(userID)
}
// UpdateUser 更新用戶(hù)
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 根據(jù)用戶(hù)名稱(chēng)查找用戶(hù)信息
func (u *UserService) FindUserByName(userName string) (user *model.User, err error) {
return u.UserRepository.FindUserByName(userName)
}
// FindUserByID 根據(jù)用戶(hù)名稱(chēng)查找用戶(hù)信息
func (u *UserService) FindUserByID(userId int64) (user *model.User, err error) {
return u.UserRepository.FindUserByID(userId)
}
// CheckPwd 比對(duì)賬號(hào)密碼是否正確
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 獲取權(quán)限
func (u *UserService) GetPermission(userID int64) (permission int64, err error) {
return u.UserRepository.GetPermission(userID)
}
// UpdatePermission 修改權(quán)限
func (u *UserService) UpdatePermission(userID int64, permission int64) error {
return u.UserRepository.UpdatePermission(userID,permission)
}
// EnableUser 啟用賬號(hào)
func (u *UserService) EnableUser(userID int64) error {
return u.UserRepository.EnableUser(userID)
}
// DisableUser 禁用賬號(hào)
func (u *UserService) DisableUser(userID int64) error {
return u.UserRepository.DisableUser(userID)
}
最后
至此,go-micro微服務(wù)domain層開(kāi)發(fā)工作就正式完成,接下來(lái)就開(kāi)始consul配置、注冊(cè)中心的代碼編寫(xiě)了,更多關(guān)于go-micro微服務(wù)domain層的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- go微服務(wù)PolarisMesh源碼解析服務(wù)端啟動(dòng)流程
- 詳解go-micro微服務(wù)consul配置及注冊(cè)中心
- go?micro微服務(wù)框架項(xiàng)目搭建方法
- go?micro微服務(wù)proto開(kāi)發(fā)安裝及使用規(guī)則
- Go 微服務(wù)開(kāi)發(fā)框架DMicro設(shè)計(jì)思路詳解
- go zero微服務(wù)框架logx日志組件剖析
- Go?chassis云原生微服務(wù)開(kāi)發(fā)框架應(yīng)用編程實(shí)戰(zhàn)
- Go語(yǔ)言從單體服務(wù)到微服務(wù)設(shè)計(jì)方案詳解
相關(guān)文章
golang包循環(huán)引用的幾種解決方案總結(jié)
golang有包循環(huán)引用問(wèn)題,用過(guò)的應(yīng)該都知道,下面這篇文章主要給大家介紹了關(guān)于golang包循環(huán)引用的幾種解決方案,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
go?defer延遲調(diào)用的使用場(chǎng)景示例詳解
這篇文章主要為大家介紹了go?defer延遲調(diào)用的使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
go語(yǔ)言編程實(shí)現(xiàn)遞歸函數(shù)示例詳解
這篇文章主要為大家介紹了go語(yǔ)言編程實(shí)現(xiàn)遞歸函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
我放棄Python轉(zhuǎn)Go語(yǔ)言的9大理由(附優(yōu)秀書(shū)籍推薦)
這篇文章主要給大家介紹了關(guān)于我放棄Python轉(zhuǎn)Go語(yǔ)言的9大理由,以及給大家推薦了6本優(yōu)秀的go語(yǔ)言書(shū)籍,對(duì)同樣想學(xué)習(xí)golang的朋友們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
使用go net實(shí)現(xiàn)簡(jiǎn)單的redis通信協(xié)議
本文主要介紹了go net實(shí)現(xiàn)簡(jiǎn)單的redis通信協(xié)議,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

