浅谈领域设计:如何从工作中提炼领域知识,为行业标准添砖加瓦

在软件开发中,我们常常听到“领域设计”这个词,但它到底是什么?为什么它如此重要?更重要的是,我们如何从日常工作中提炼领域知识,为行业标准做出贡献?这篇文章将用浅显易懂的语言,带你了解领域设计,并给出一些实用的指导建议。

什么是领域设计?

领域设计(Domain-Driven Design, DDD)是一种软件开发方法论,它的核心思想是将业务逻辑和领域知识显式地体现在代码中。简单来说,领域设计就是通过深入理解业务需求,将复杂的业务规则和流程抽象成可复用的模型,从而让代码更贴近业务,更易于维护和扩展。

举个例子,如果你在开发一个电商平台,领域设计会帮助你将“订单管理”、“库存管理”等业务逻辑封装成独立的模块,而不是将它们分散在项目代码的各个角落。

以一个普通的前端项目为例。

{
  dependencies: {
    orders_system: "git+https://gitee.com/...#1.2.0",
  } 
}

routers.ts

import {BuidPage, ListPage, ManagePage} from "orders_system";
...

const routes = [
  {
    path: '/build_order',
    name: 'buildOrder',
    component: BuildPage
  },
  ...
];

这个时候,"订单管理"就变成了一个领域,开发就变成了配置这个“领域”。

(上面的代码过于形而上学,要真正的实现,还得从前端,后端乃至整个工具链上着手。)

领域设计是工作中细节的总结和归纳吗?

是的,领域设计往往源于对工作中细节的总结和归纳。在日常开发中,我们会遇到各种业务需求和问题,通过不断解决这些问题,我们会积累大量的经验和知识。领域设计就是将这些经验和知识系统化、抽象化,形成可复用的模型或组件。

比如,在前端开发中,我们可能会发现很多页面都需要一个日期选择器,而且这些日期选择器的功能需求非常相似。通过将这些需求总结和归纳,我们可以设计一个通用的日期选择器组件,从而减少重复劳动,提高开发效率。

实际案例:从细节中提炼领域知识

案例1:日期选择框中的快捷键

假设我们在多个页面中都需要使用日期选择器,并且每个日期选择器都需要支持快捷键(如“今天”、“昨天”、“上周”等)。如果我们直接在每个页面上配置这些快捷键,会导致重复的配置。更好的做法是:

1. 模块化配置:将快捷键的配置集中到一个模块中,然后在各个页面中引用这个模块。

2. 封装成组件:基于日期选择器封装一个自带快捷键的组件,这样所有页面都可以直接使用这个组件,而无需重复配置。

通过这种方式,我们不仅减少了代码冗余,还将业务逻辑(快捷键的配置)抽象成了一个可复用的领域对象。

下面这个配置和日期组件可以封装到一个领域对象中。

import dayjs from "dayjs";

export default [
  {
    text: "最近一分钟",
    value: () => {
      const end = dayjs();
      const start = end.subtract(1, "minute"); // 60秒前
      return [start, end];
    }
  },
  {
    text: "最近5分钟",
    value: () => {
      const end = dayjs();
      const start = end.subtract(5, "minute"); // 5分钟前
      return [start, end];
    }
  },
  ...
]

案例2:内容块之间的固定间距

在前端设计中,我们可能会发现很多页面的内容块之间的间距是固定的。如果每个页面都单独定义这些间距,会导致样式不一致,也难以维护。更好的做法是:

1. 定义样式标准:在项目中定义一个全局的样式文件,规定内容块之间的间距。

2. 复用样式:所有页面都引用这个样式文件,确保间距的一致性。

通过这种方式,我们将UI设计中的规则抽象成了一个可复用的样式标准,从而提高了设计和开发的效率。

领域设计是自上而下还是自下而上?

从上面的案例可以看出,领域设计既可以是自上而下的,也可以是自下而上的:

  • 自上而下:由行业标准或设计规范驱动,比如定义全局的样式标准或组件库。

  • 自下而上:从实际工作中的细节出发,通过总结和归纳,提炼出可复用的模型或组件。

在实际工作中,这两种方式往往是相辅相成的。我们可以通过自下而上的方式,从细节中提炼领域知识;同时,也可以参考行业标准,自上而下地优化和扩展我们的领域模型。

如何构建领域相关的产出?

如果你希望从工作中提炼领域知识,为行业标准添砖加瓦,可以遵循以下建议:

1. 观察和总结:在日常工作中,注意观察重复出现的需求和问题,并尝试总结出通用的解决方案。

2. 抽象和封装:将通用的解决方案抽象成可复用的模型或组件,比如封装一个通用的日期选择器组件,或定义一套全局的样式标准。

3. 文档化:将你的领域知识文档化,方便团队成员查阅和复用。

4. 分享和反馈:将你的领域知识分享给团队或社区,收集反馈,不断优化和扩展你的领域模型。

5. 参考行业标准:在提炼领域知识的过程中,可以参考行业标准或最佳实践,确保你的领域模型与行业趋势保持一致。

结语

领域设计并不是一个高深莫测的概念,它源于我们对日常工作的总结和归纳。

( 很多时候,我们都是在解决问题,但是并没有对问题做进一步的分析,因此,止步于此,最终和领域设计无缘,然后,周而复始的解决类似的问题,以为这就是我们的命运。)

通过观察细节、抽象模型、封装组件,我们可以将零散的知识系统化,形成可复用的领域产出。这不仅提高了我们的开发效率,也为行业标准的完善做出了贡献。希望这篇文章能帮助你更好地理解领域设计,并在实际工作中应用它,为行业添砖加瓦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涵树_fx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值