首页 编程正文

为 Gopher 打造 DDD 系列:领域模型-六边形架构

访客 编程 2020-07-24 18:33:08 22 0 架构模型领域
前言:六边形架构又称“端口适配器架构”,实际上也是一种分层架构,只不过由上下或者左右变成了内部与外部。其核心理念就是应用通过端口与外部进行交互的。核心的业务逻辑(领域模型)与外部资源(数据库等资源)完全隔离,仅通过适配器进行交互,解决了业务逻辑与用户数据交错的问题,很好的实现了前后端分离。困惑:六边形架构项目目录domain 领域模型目录adapter 适配器目录外部adapter目录下的controller和repository依赖内部的domain相关实现,那么如果domain要使用repository处理po的读写呢?这样不就互相依赖了吗?后续文章《依赖倒置》将讲解什么是外部依赖内部,内部依赖抽象。代码示例

package controllerimport ( domain "github.com/8treenet/freedom/example/fshop/domain")type Cart struct { Worker freedom.Worker CartSev *domain.Cart //购物车领域服务}// GetItems 获取购物车商品列表, GET: /cart/items route.func (c *Cart) GetItems() freedom.Result { userId, err := c.Worker.IrisContext().URLParamInt("userId") if err != nil { return &infra.JSONResponse{Error: err} } //适配http的输入参数userId后调用领域模型目录的入口领域服务 dto, err := c.CartSev.Items(userId) if err != nil { return &infra.JSONResponse{Error: err} } return &infra.JSONResponse{Object: dto}}领域模型

package domainimport ( //引用仓库 "github.com/8treenet/freedom/example/fshop/adapter/repository" "github.com/8treenet/freedom/example/fshop/domain/aggregate")// Cart 购物车领域服务.type Cart struct { CartRepo repository.CartRepo //购物车仓库,这里是依赖倒置的}// Items 购物车全部商品项func (c *Cart) Items(userId int) (items dto.CartItemRes, e error) { // 使用 c.CartRepo读取购物车数据 return}// DeleteAll 清空购物车func (c *Cart) DeleteAll(userId int) (e error) { return c.CartRepo.DeleteAll(userId)}

版权声明

旭日软件园-提供免费小软件下载,电脑教程和QQ表情包下载为主要宗旨.同时有网站运营,
编程教程,网页特效,手机教程,游戏攻略和IT资讯等内容,打造常用软件下载、内容丰富的站长学习!

本文链接:http://www.webmaster5u.com/bc/392.html

评论