当前位置: 首页 > wzjs >正文

共青团员建设网站百度小说搜索排行榜

共青团员建设网站,百度小说搜索排行榜,新手怎样自己做网站,审查网站开发合同领域驱动设计 在软件所属领域之后对软件进行结构化和建模的一种方法,首先考虑编写软件的领域,软件的编写应该反映该领域 领域:软件处理的主题或问题 DDD主张工程团队必须与主题专家(SME)交谈,将知识反映在软件中 实体 创建enti…

领域驱动设计

在软件所属领域之后对软件进行结构化和建模的一种方法,首先考虑编写软件的领域,软件的编写应该反映该领域
领域:软件处理的主题或问题
DDD主张工程团队必须与主题专家(SME)交谈,将知识反映在软件中

实体

创建entity,存放实体
实体:一个结构体包含标志符,状态可能会改变(实体的值可以改变)
在这里插入图片描述

// entity包保存所有子领域共享的所有实体
// 一个结构体具有唯一标识符来引用,状态可变package entityimport "github.com/google/uuid"// 实体
// Item表示所有子领域的Item
// bson表示存储在mongodb中的结构体type Item struct {ID          uuid.UUID `json:"id" bson:"id"`Name        string    `json:"name" bson:"name"`Description string    `json:"description" bson:"description"`
}
package entityimport "github.com/google/uuid"// 实体
// Person 在所有领域中代表人
type Person struct {// ID是实体的标识符,该ID为所有子领域共享ID uuid.UUID `json:"id" bson:"id"`//Name就是人的名字Name string `json:"name" bson:"name"`// 人的年龄Age int `json:"age" name:"age"`
}

值对象

结构体不可变,不需要唯一标识符
结构体在创建时没有标识符和持久化值
值对象通常位于领域内,用于描述该领域的某些方面
在这里插入图片描述

package valueobjectimport ("github.com/google/uuid""time"
)// 值对象结构体不可变,不需要唯一标识符和持久化值
// 持久化值:没有唯一标识,但本身具有完整意义的对象
// 相等值通过值判断而不是身份
// 只要Transaction的字段值是都相同的,那么就认为两个Transaction是相等的,不依赖唯一id
// 即时存储在数据库中,只需保存这些字段值,不需要通过id识别// Transaction 表示双方用于支付
// 一旦事务被执行,它就不能改变状态
type Transaction struct {Amount    int       `json:"amount" bson:"amount"`From      uuid.UUID `json:"from" bson:"from"`To        uuid.UUID `json:"to" bson:"to"`CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
}

聚合

一组实体和值对象的组合
聚合时领域概念
聚合的目的:
业务逻辑将应用于聚合,而不是每个持有该逻辑的实体
聚合不允许直接访问底层实体
聚合中应该只有一个实体作为根实体,意味着根实体的引用也用于聚合
在这里插入图片描述

package aggregateimport ("errors""github.com/google/uuid""test/DDD/entity""test/DDD/valueobject"
)// 聚合
// 一组实体和值对象的组合,用来表示一个业务实体
// 只有一个实体作为根实体
// 对于一个聚合来说实体的id是唯一标识符var (// 当person在newcustom工厂中无效时返回ErrInvalidPersonErrInvalidPerson = errors.New("a customer has to have an valid person")
)// 因为要实现聚合可序列化,所以会选择跳过不能访问底层实体的规则
// Customer 聚合包含了代表一个客户所需的所有实体
// 将实体设为指针,是因为实体可以改变状态
// 想反映在运行时所有访问它的实例中
// 保存为非指针不能改变状态
type Customer struct {// Person是客户的根实体// person.ID是聚合的主标识符Person *entity.Person `bson:"person"`//一个客户可以持有许多产品Products []*entity.Item `bson:"products"`// 一个客户可以执行许多事务Transactions []valueobject.Transaction `bson:"transactions"`
}

工厂函数

工厂模式是一种设计模式,在创建所需实例的函数中封装复杂逻辑,调用者不需要知道其中细节
DDD建议使用工厂创建复杂的聚合,仓库和服务
(在实际应用中,会在领域中包含聚合的Customer和工厂)

// NewCustomer 是创建新的Customer聚合的工厂
// 它将验证名称是否为空
func NewCustomer(name string) (Customer, error) {// 验证Name不是空的if name == "" {return Customer{}, ErrInvalidPerson}// 创建一个新person并生成IDperson := &entity.Person{Name: name,ID:   uuid.New(),}// 创建一个customer对象并初始化所有的值以避免空指针异常return Customer{Person:       person,Products:     make([]*entity.Item, 0),Transactions: make([]valueobject.Transaction, 0),}, nil
}

开启单元测试

package aggregate_testimport ("test/DDD/aggregate""testing"
)func TestCustomer_NewCustomer(t *testing.T) {// 构建我们需要的测试用例数据结构type testCase struct {test        stringname        stringexpectedErr error}//创建新的测试用例testCases := []testCase{{test:        "Empty Name validation",name:        "",expectedErr: aggregate.ErrInvalidPerson,}, {test:        "Valid Name",name:        "Percy Bolmer",expectedErr: nil,},}for _, tc := range testCases {// Run Testst.Run(tc.test, func(t *testing.T) {//创建新的customer_, err := aggregate.NewCustomer(tc.name)//检查错误是否与预期的错误匹配if err != tc.expectedErr {t.Errorf("Expected error %v, got %v", tc.expectedErr, err)}})}}
http://www.dtcms.com/wzjs/483035.html

相关文章:

  • 政府网站建设发展思路关键词优化推广公司排名
  • 网站seo排名优化软件深圳seo公司助力网络营销飞跃
  • 恩做网站动态页面好合肥seo排名扣费
  • 网站开发是用什么语言长沙市云网站建设
  • 企业网站 asp.net全网网站快速排名推广软件
  • 如何管理手机网站首页最新搜索关键词
  • 网页开发用什么编程语言专业搜索引擎seo服务商
  • 简述网站开发基本流程杭州搜索引擎优化公司
  • 海珠做网站公司正规百度推广
  • 义乌网站建设多少钱软文广告图片
  • 建网站网站新能源汽车公司
  • 做文交所的都有哪些网站5118站长工具箱
  • b2c商城网站哪个行业最需要推广
  • 乐陵网站开发小吃培训机构排名前十
  • 男女做啊免费视频网站搜索引擎优化实训
  • 接视频做的网网站百度seo 优化
  • 网站规划与建设课程设计临沂百度推广多少钱
  • 龙岗网站制作市场客源引流推广
  • 泰安市最新消息今天百度seo价格查询系统
  • 如何查外贸网站外链品牌策略的7种类型
  • 关于网站建设管理工作的报告近10天的时事新闻
  • 智能网站建设系统百度关键词排名怎么靠前
  • 政府网站的作用和意义高清的网站制作
  • 大型集团公司网站建设方案网推是干什么的
  • 图虫网官网入口杭州市优化服务
  • 做网站的qq兼职百度搜索引擎工作原理
  • 《学做网站论坛》视频下载seo站点
  • 技术支持 东莞网站建设东莞天助网店网络营销策划方案
  • 外贸网站怎么做优化关键词排名优化公司外包
  • 房地产网信息青岛网站关键词排名优化