# 天联共创

## 项目架构
- 基于REST Full的微服务架构

## 代码仓库及相关文档
- [代码仓库地址](http://gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation.git)
- [DSL文件仓库地址](http://gitlab.fjmaimaimai.com/allied-creation/document)  
- [标准产品文件svn](svn://220.250.41.79/repo/标准产品文件)
- [天联共创API(APP)](http://47.97.5.102:36666/project/342/interface/api)
- [APP端原型地址](https://9cnuol.axshare.com/)
- [WEB端原型地址](https://eq4yc2.axshare.com/)

## 项目规范
- 领域描述语言文档位置:document/allied-creation-cooperation/
- GIT流程:里程碑->问题->功能分支->代码审查->合并分支
- 开发分支命名规范:dev-姓名全拼
- 接口规范:[API交互规范](https://doc-press.fjmaimaimai.com/standard/api.html)
- 接口版本号:v1
- 数据交互规范:[数据交互格式标准](https://doc-press.fjmaimaimai.com/team/frontend/overview/http.html)

## 项目使用框架
- HTTP框架:Beego
- ORM框架:go-pg
- 数据存储:PostgreSQL
- 项目结构分层:六边形架构(接口适配器模式)
- 消息中间件:kafka

## 项目整体结构
```
├─conf      项目配置文件 
├─deploy    项目部署文件
├─document  项目dsl文档、openapi文档、diagram图片              
├─pkg
│  ├─application   应用服务层(调度编排仓储、dao、领域服务等,完成User Case)
│  │  ├─xxx                       xxx
│  │  ├─factory                   工厂类,实例具体的实现(数据仓储)                  
│  │  └─xxx                       xxx
│  ├─domain     领域模型层(核心数据处理,接口定义)
│  │  ├─event       领域事件定义
│  │  └─service     领域服务定义      
│  ├─infrastructure 基础设施层
│  │  ├─dao                 特殊的数据库操作
│  │  ├─domainService       实现领域服务(操作多个领域对象,实现领域内的业务逻辑)   
│  │  ├─pg                  数据库模型定义
│  │  ├─repository          数据仓储具体实现(对应domain定义数据库的数据存储接口)
│  │  └─serviceGateway      其他系统服务调用         
│  ├─log    
│  └─port           用户接入层(http接入)
│     └─beego       beego接入          
└─vendor            包缓存
```

## 领域驱动设计-战略建模
### 领域

### 限界上下文

### 上下文映射

## 领域驱动设计-战术建模
### 实体

### 值对象

### 聚合根

### 领域服务

### 领域事件

## 领域驱动设计工程实现
### 模块

### 领域对象

### 资源库

### 防腐层

### 领域服务

### 数据流转

### 上下文集成

### 分离领域

## 功能模块实现

### 领域事件发布流程

### DTO模块开发

### REST集成限界上下文

## 标准产品组工具使用
- 设置全局变量(替换YOUR-USER-PATH为你真实的项目路径)

  1.生成路径(项目生成路径):/YOUR-USER-PATH/go/src/

  2.eggs根目录路径(领域描述语言DSL文档路径生成或引用路径):/YOUR-USER-PATH/go/src/allied-creation-cooperation/document/

  3.egg名称(通常为项目名称,同样是DSL文件夹名称):allied-creation-cooperation

- 应用描述语言生成

  1.应用描述语言egg脚手架生成

  2.生成属性(Attribute)

  3.生成模式(Schema)

  4.生成服务(Service)

  5.生成接口(Api)

- 具体工程生成

  1.生成接口文档(OpenApi)

  2.生成项目代码脚手架

  3.生成领域模型

  4.生成应用服务

  5.生成Http协议接口

- 调试技巧

  1.代码生成器服务端500错误调试技巧

  在任务管理其中关闭由标准化平台启动的eggcode.exe(需要debug版本才能查看日志),在命令行通过命令eggcode.exe http -p 9099启动生成器服务,这样就可以打印出生成器500错误的具体信息,关键还是在编写dsl时要细心,不需要的配置整体删干净,需要的配置写完整,注意属性名不要和golang的关键字或者保留字冲突,例如:type、no

  2.集成测试技巧

  Describe前面添加F可以针对当前用例进行测试,同样的It前面增加F也可以针对一个Describe中的不同IT进行测试,F的意思为Focus,另外还有其他标记如:P(Pending) or X,详情 [参考](https://onsi.github.io/ginkgo/) Ginkgo官方文档The Spec Runner章节