软件架构设计——催化剂建模法角色-目标-实体法

2024-08-27 09:20

本文主要是介绍软件架构设计——催化剂建模法角色-目标-实体法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

催化剂建模法&角色-目标-实体法

一、什么是催化剂建模法?

催化剂建模法是一种帮助你从业务流程的角度来设计系统架构的方法。它的核心思想是把业务的各个流程“展开”,让你更清楚地看到每一步都在处理什么,涉及哪些数据和操作。

更通俗地解释:

想象你在厨房里做一道复杂的菜。为了不出错,你把每一个步骤都写在纸上,比如“切菜”、“炒菜”、“加盐”等等。催化剂建模法就像是在做这样的流程清单,但是是为软件系统而做。通过这个方法,你能够把复杂的业务流程拆解成简单的步骤,然后看清每个步骤需要的数据(比如“菜刀”、“锅”)和操作(比如“切”、“炒”)。

实际应用中的例子:

假设你在设计一个网上书店的系统,用户可以浏览书籍、选择书籍、加入购物车、然后购买。这个过程涉及到多个操作步骤,比如“浏览书籍”、“添加到购物车”、“付款”等。

在催化剂建模法中,你会这样去做:

  1. 列出所有的业务流程:比如浏览书籍、添加到购物车、付款。
  2. 确定每个流程涉及的实体:在“浏览书籍”过程中,你会涉及“书籍”这个实体。在“付款”过程中,你会涉及“订单”和“支付”实体。

这一步一步的过程让你看到每个业务流程需要的数据和操作,从而更好地设计系统。

二、什么是角色-目标-实体法?

角色-目标-实体法是一种帮助你分析系统中的不同角色(比如用户、管理员),他们的目标(比如购买书籍、管理库存),以及实现这些目标所需要处理的数据(比如订单、书籍、库存)的方法。

更通俗地解释:

想象一个公司里有不同的员工,他们有各自的工作目标。比如销售员的目标是卖出更多产品,财务员的目标是管理好公司账目。每个人在完成自己目标的过程中,会接触到不同的数据,比如销售员接触产品信息,财务员接触财务报表。

角色-目标-实体法就是用类似的方法来设计系统:先明确系统里有哪些“角色”,然后明确每个角色的“目标”,最后确定他们在实现目标时会接触到哪些“实体”。

实际应用中的例子:

回到网上书店的例子,假设系统中有以下角色:

  • 用户:他们的目标是浏览书籍、选择书籍并购买。
  • 管理员:他们的目标是管理库存、查看销售记录。

在角色-目标-实体法中,你会这样做:

  1. 确定每个角色:比如用户、管理员。
  2. 明确他们的目标:用户的目标是购买书籍,管理员的目标是管理库存。
  3. 找出相关实体:用户在实现目标时会接触到“书籍”和“订单”,管理员则接触到“库存”和“销售记录”。

这个方法帮助你理清系统中每个角色需要处理的数据和他们之间的关系。

三、一步一步设计领域模型

现在我们用具体的步骤和代码示例来说明如何应用这些方法设计领域模型。

步骤1:业务流程分析(催化剂方法)

假设我们设计一个网上书店的系统。首先,我们分析用户购买书籍的流程:

  1. 用户浏览书籍列表。
  2. 用户选择一本书并查看详情。
  3. 用户将书籍加入购物车。
  4. 用户支付订单。

在催化剂建模法中,我们关注每一步涉及的数据:

  • 浏览书籍列表:涉及“书籍”实体。
  • 查看书籍详情:涉及“书籍”实体。
  • 加入购物车:涉及“购物车”实体和“书籍”实体。
  • 支付订单:涉及“订单”和“支付”实体。
步骤2:角色分析(角色-目标-实体法)

接着,我们考虑系统中的角色和他们的目标:

  • 用户:目标是购买书籍,他们会接触到“书籍”、“购物车”、“订单”和“支付”实体。
  • 管理员:目标是管理书店,他们会接触到“书籍”和“库存”实体。

我们可以看到,这些角色在实现各自目标时会处理不同的数据。

四、Python代码示例

我们来看看如何用Python代码实现这些领域实体。

# 实体1:书籍
class Book:def __init__(self, book_id, title, author, price):self.book_id = book_idself.title = titleself.author = authorself.price = price# 实体2:购物车
class ShoppingCart:def __init__(self):self.items = []def add_to_cart(self, book):self.items.append(book)print(f"Added {book.title} to the shopping cart.")# 实体3:订单
class Order:def __init__(self, order_id, cart):self.order_id = order_idself.cart = cartself.total = self.calculate_total()def calculate_total(self):return sum(book.price for book in self.cart.items)# 实体4:支付
class Payment:def __init__(self, payment_id, order, amount):self.payment_id = payment_idself.order = orderself.amount = amountdef process_payment(self):if self.amount >= self.order.total:print(f"Payment of {self.amount} processed for order {self.order.order_id}.")else:print("Insufficient payment amount.")# 示例使用:
book1 = Book(book_id=1, title="The Catcher in the Rye", author="J.D. Salinger", price=10.99)
book2 = Book(book_id=2, title="1984", author="George Orwell", price=8.99)cart = ShoppingCart()
cart.add_to_cart(book1)
cart.add_to_cart(book2)order = Order(order_id=1001, cart=cart)
payment = Payment(payment_id=2001, order=order, amount=20.00)
payment.process_payment()

代码解释:

  1. Book类:表示书籍的实体,包含书籍的ID、标题、作者和价格。
  2. ShoppingCart类:表示购物车,包含一个书籍列表,add_to_cart方法用于将书籍加入购物车。
  3. Order类:表示订单,包含订单ID和购物车。calculate_total方法计算订单的总金额。
  4. Payment类:表示支付,包含支付ID、订单和支付金额。process_payment方法用于处理支付逻辑。

五、总结

通过催化剂建模法,你能够清楚地看到每个业务流程需要的数据和操作,从而设计出更加贴合实际业务的系统模型。通过角色-目标-实体法,你能够理清系统中不同角色需要处理的数据和他们之间的关系。这两种方法结合起来,可以帮助你更好地理解和设计复杂的系统结构。希望通过更详细的步骤和代码示例,这些概念变得更加通俗易懂。

这篇关于软件架构设计——催化剂建模法角色-目标-实体法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111263

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易