设计系统

简介: 设计系统

Designing Systems


设计系统

在我的上一篇文章中,我解释说,作为一名开发人员,您并不创建应用程序,而是创建系统,即对其环境做出响应的活实体(浏览器、服务器、……)。在这篇文章中,我将描述一个为了创建系统您可以遵循的过程。这个过程是受到了Donella H.Meadows的出色工作的启发,B-Method是我在大学里学过的,并且是领域驱动设计。

这个过程由5个步骤组成:

1. 确认需求

2. 设计系统

3. 确认设计

4. 精细化设计

5. 生成系统


1.确认需求

永远记住你是人

为了创建系统,你首先需要意识到你感知事物并把世界理解为人类发出的哔哔声。这意味着,当我们思考一个特定的问题时,我们用我们自己对世界的精神表现来解决它。我们在思考的时候从不客观。我们受到我们的文化,生活经验,母语,…我们可能会错过有用的信息,因为我们不能从自己的角度来看待它们。因此,你越想解决一个问题,你就会得到越好的解决方案。所以,创建最多样化的团队,并邀请他们参加一个会议,开始设计系统。

包罗万象

首先,要不要打断那些要求一个特性/解决一个问题/……的人。然后一些关于上下文的问题。得到尽可能多的信息,让所有的团队对话。这非常重要。每个人都需要在会议期间发言,以便能够毫无困难地分享自己对背景的理解。

用同一种语言交流

项目中的主要问题始终是沟通,所以要确保每个人用同一种语言交流,用户能理解的语言,而不是使用一些技术名词。为了这个目的,在纸上写上你用来定义上下文和定义的所有单词。好让每个人都知道你在说什么。


2. 设计系统

拿一张纸和一支笔

因为如果你不能设计它,你就不能向别人解释它。

创建边界

image.png

一个表示系统边界的大圆。然后把你列出的单词都写下来

在圆周内写出你认为是系统的一部分的概念。把你认为不是系统的一部分的概念写在圆圈外。

边界取决于您对系统的理解,并且可以从一个角度改变到另一个角度。例如:在设计一个web应用程序时,您可以在系统中包含服务器……或者不包含。这取决于你把这个边界放在哪里。

找出引起系统响应的事件是什么

image.png

然后看看您放在系统外部的概念。考虑这些概念如何与您的系统交互。

为每个可以发送到系统的消息创建进入系统的箭头。并命名负责此消息的事件

设计模型

image.png

现在,看看你在系统中输入的所有单词。在每个单词周围创建一个正方形。然后在你认为相关的每个正方形之间画一条线。不要在链接上添加信息,只要画一条线就可以了。其目的是对这些概念及其关系有一个全局概览。

查找核心组件

image.png

命名要启动系统所需的组件,并绘制表示这些组件的小圆圈。我们称它们为核心组件。


3. 确认设计

现在我们对该系统有了一个完整的概述。我们知道:

* 系统的边界是什么,

* 引起系统反应的事件是什么?

* 该系统的模型是什么?

* 系统的核心组件是什么?

确保每个人都同意设计,并了解系统是如何组成的


4. 精细化设计

描述模型

既然每个人都同意这个设计,你就可以更精确地描述这个模型。要做到这一点,你需要问:

* 模型的属性是什么?

* 模型的行为是什么?

* 什么是链接的类型。它们是收集,继承,…?

* 模型发送的事件是什么?

我鼓励您使用UML来定义模型。但要保持简单,就像我们以前做的那样。总是使用每个人都能理解的设计

image.png

找出核心组件的初始状态

找出系统核心组件的初始值。您必须回答的问题很简单:要启动系统,需要在哪个状态下完成核心组件?

我鼓励您在一个JSON对象中描述这些值。您可以轻松地更新它是人类可读的格式。

image.png

定义消息

定义发送到系统并由系统返回的消息的类型。

还可以使用UML来定义消息的结构。

image.png


5. 生成系统

现在您已经定义了模型,并找到了核心组件的初始状态,然后从模型生成系统。不要开始编写代码,否则您的代码将总是与您的模型不同步。然后从生成的代码中实现系统的行为

结论

设计一个系统是一项复杂的任务,需要每个人的努力。设计一个系统不需要技术技能,但是人工技能是必须的

这是我创建系统时使用的过程的一个快速概述。我没有详细说明,我只是描述了这一过程的主要步骤,以便你能使它适应你的工作。

在我的下一篇文章中,我将更深入地讨论模型设计过程,并解释如何使模型与您的运行系统同步。


原文地址:https://dev.to/ecarriou/designing-systems-17po

原作者:Erwan Carriou

翻译:小虎Oni

目录
相关文章
|
9月前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
630 81
|
7月前
|
机器学习/深度学习 人工智能 搜索推荐
Second Me:硅基生命或成现实?如何用AI克隆自己,打造你的AI数字身份!
Second Me 是一个开源AI身份系统,允许用户创建完全私有的个性化AI代理,代表用户的真实自我,支持本地训练和部署,保护用户隐私和数据安全。
992 8
Second Me:硅基生命或成现实?如何用AI克隆自己,打造你的AI数字身份!
|
9月前
|
人工智能 程序员 开发者
欢迎加入通义灵码繁星计划,成为校园大使
「通义灵码繁星计划」希望为每位开发者送一个智能编码助手,为职场、校园开发者提供不同维度的产品免费使用、体系化课程学习、人才认证考试等权益,同时长期建设通义灵码MVP、校园大使体系,激活创新潜力,培养创新明星,点亮追梦之旅。
683 36
|
10月前
|
编解码 前端开发 开发者
探索无界:前端开发中的响应式设计深度实践与思考###
本文将带你领略响应式设计的精髓,一种超越传统页面布局限制的设计策略,它要求开发者以灵活多变的思维,打造能够无缝适应各种设备与屏幕尺寸的Web体验。通过深入浅出的讲解、实际案例分析以及技术实现细节的探讨,本文目的是激发读者对于响应式设计深层次的理解与兴趣,鼓励在实际应用中不断创新与优化。 ###
320 10
|
机器学习/深度学习 数据采集 自然语言处理
【机器学习】大模型驱动下的医疗诊断应用
摘要: 随着科技的不断发展,机器学习在医疗领域的应用日益广泛。特别是在大模型的驱动下,机器学习为医疗诊断带来了革命性的变化。本文详细探讨了机器学习在医疗诊断中的应用,包括疾病预测、图像识别、基因分析等方面,并结合实际案例进行分析。同时,还展示了部分相关的代码示例,以更好地理解其工作原理。
426 3
【机器学习】大模型驱动下的医疗诊断应用
|
11月前
|
人工智能 自然语言处理 算法
政务培训|LLM大模型在政府/公共卫生系统的应用
本课程是TsingtaoAI公司面向某卫生统计部门的政府职员设计的大模型技术应用课程,旨在系统讲解大语言模型(LLM)的前沿应用及其在政府业务中的实践落地。课程涵盖从LLM基础知识到智能化办公、数据处理、报告生成、智能问答系统构建等多个模块,全面解析大模型在卫生统计数据分析、报告撰写和决策支持等环节中的赋能价值。
284 2
|
Ubuntu Linux Windows
wsl重装Ubuntu遇到的一些问题( WslRegisterDistribution failed with error: 0x80041002 Error: 0x80041002 (null)、重置网络后WLAN图标消失)
wsl重装Ubuntu遇到的一些问题( WslRegisterDistribution failed with error: 0x80041002 Error: 0x80041002 (null)、重置网络后WLAN图标消失)
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
299 7
|
存储 C语言 开发者
C标准库-time.h
`<time.h>` 是 C 语言标准库中的头文件,提供了处理日期和时间的功能。它定义了 `time_t`, `tm` 等类型及多种函数,如 `time()` 获取当前时间戳,`localtime()` 和 `gmtime()` 将时间戳转换为本地时间和 UTC 时间,`strftime()` 格式化时间,`mktime()` 将 `tm` 结构转换为时间戳,`nanosleep()` 暂停程序执行等。这些功能帮助开发者高效地进行时间相关的编程工作。
|
安全 Linux 数据安全/隐私保护
Linux命令strings详解
`strings`是Linux工具,用于从二进制文件中提取可打印字符串,常用于文件分析、安全审计和逆向工程。它可以识别至少4个连续可打印字符的序列,并支持多种参数,如`-n`调整最小长度,`-f`显示文件名。示例用法包括`strings /bin/ls`和`strings -n 6 /usr/bin/uptime | grep GLIBC`。注意敏感信息泄露,结合其他命令可增强分析能力。