我用自己理解的领域驱动设计,写了一个基础开发平台,本着学习的心态和大家分享,欢迎大家提供意见或建议

2022-09-29 16:51:45 +08:00
 brucetao2009

我用自己理解的领域驱动设计写了一套单体应用基础开发平台, 前端用的以是 vue-element-admin 为基础构建的,其中加入了自己研发了定制化的组件以方便开发,比如 表格组件,

代码示例:

<cdp-table :table-config="tableConfig">
      <template v-slot:tableOperations="slotProps">
        <el-dropdown size="small" :hide-on-click="false" trigger="click">
          <el-button type="text" style="margin-left:10px" size="small">
            更 多<i class="el-icon-arrow-down el-icon--right" />
          </el-button>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item @click.native="resetPassword(slotProps)">重置密码</el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
      </template>
    </cdp-table>

表格配置信息

      tableConfig: {
        title: '账户',
        url: '/api/v1/account',
        columns: [
          {
            name: 'username',
            type: 'input',
            label: '账号',
            formConfig: {
              rules: [{ required: true, message: '账号不能为空' }]
            }
          },
          {
            name: 'name',
            formConfig: {
              name: 'user_id',
              type: 'user-select-table',
              rules: [{ required: true, message: '请选择用户' }]
            },
            label: '用户名'
          },
          {
            name: 'nickname',
            type: 'input',
            label: '昵称'
          },
          {
            name: 'role_name',
            formConfig: {
              name: 'role_ids',
              type: 'select',
              key: 'id',
              value: 'name',
              multiple: true,
              url: '/api/v1/role/all'
            },
            searchConfig: {
              hidden: true
            },
            label: '角色'
          },
          {
            name: 'status',
            type: 'select',
            label: '状态',
            align: 'center',
            formConfig: {
              type: 'select'
            },
            searchConfig: {
              type: 'select'
            },
            data: [
              { key: 1, value: '新建', type: 'warning' },
              { key: 2, value: '进行中', type: 'info' },
              { key: 3, value: '通过', type: 'success' },
              { key: 4, value: '拒绝', type: 'danger' }
            ]
          },
          {
            name: 'create_time',
            type: 'date',
            label: '创建时间',
            width: 180,
            formConfig: {
              type: 'date',
              hidden: true
            },
            searchConfig: {
              type: 'date',
              hidden: true
            }
          }
        ]
      }

表单组件,

<template>
  <div style="width:40%">
    <cdp-select-icon />
  </div>
</template>
<script>
import CdpSelectIcon from '@/components/cdp-ui/CdpSelectIcon'
export default {
  components: {
    CdpSelectIcon
  },
  data() {
    return {}
  },
  methods: {}
}
</script>

后端以 spring-boot 为基础,使用了 mybatis-plus,mapstructs 等开源 jar 包 数据库以 mysql 做数据存储

后面领域模型设计结构如下:

前端界面如下:

项目地址

github:

前端: https://github.com/kushu001/cdp-web-vue

后端: https://github.com/kushu001/cdp

gitee:

前端: https://gitee.com/kushu001/cdp-web-vue

后端: https://gitee.com/kushu001/cdp

目前已经做完一版领域模型设计的改造,欢迎大家试用,有什么建议也可以跟我提,

我知道在坛子里有很多大佬,我知道我写的很垃圾(^ ^),也知道市面上有很多差不多的开源项目,我写这个一方面是市面上没有找到好一点的相关领域架构设计的框架(有一些框架我也看不懂),所以我就尝试着自己写一套。

在代码架构设计这块,我也一直处于摸索中,难免会有很多不足的地方,感谢大家能够批评指正,提供更好的建议,我一定会虚心采纳。

谢谢

1762 次点击
所在节点    程序员
6 条回复
x500
2022-09-29 19:50:48 +08:00
看上去不错
jones2000
2022-09-29 20:34:11 +08:00
东西太多, 而且基本都是用库,对自己理解框架没有什么帮助,只是把这些库组装起来,也不明白什么为什么这些库要这样设计。最好是不用库,自己实现,这样才能明白别人为什么要这么设计。
yule111222
2022-09-30 14:44:36 +08:00
建议把 domain 层单独做一个模块,几乎不添加外部依赖,让其他模块都去依赖 domain 层
brucetao2009
2022-10-01 19:20:44 +08:00
@yule111222 单独一个模块是指? 我现在是 domain 单独一个层的,domain 基本没有依赖,只做业务领域模型,我在领域模型构建上还是觉得有所欠缺,后面等我理解更深一步了,会再对代码进行优化
brucetao2009
2022-10-01 19:23:16 +08:00
@jones2000 用库没问题吧,不影响领域驱动设计啊,而且我也只是用了基础库,总不能让我再去实现一个持久层吧(*^o^*)
yule111222
2022-10-11 08:54:02 +08:00
@brucetao2009 单独的 maven module,从依赖关系上彻底隔绝向外依赖的可能性

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/883857

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX