鱼骨图

什么是鱼骨图

鱼骨图是显示事件原因的图表,通常用于制造和产品开发,以概述流程中的不同步骤,展示可能出现质量控制问题的问题,并确定在特定时间需要哪些资源。

关键要点

  • 鱼骨图用于显示导致某些最终结果的因果因素,通常与生成或设计问题有关
  • 这些图标的形状有点像鱼,所以被称为“鱼骨图”(英文:Ishikawa 开发者名字)
  • 鱼骨图遵循一系列的八个步骤来创建

理解鱼骨图

由 Kaoru Ishikawa 创建的因果图,用于显示特定事件的原因。头部显示特定事件的结果,肋骨代表事件的原因。 鱼骨图的目的是让管理层确定必须解决哪些问题才能获得或避免特定事件。

broadcasting

鱼骨图分析的类别(6Ms)

  • 人力- 从事产品设计和交付的人员的操作和/或职能劳动。这被认为是给定问题的一个相当罕见的“原因”。通常,如果人力被确定为造成不良影响的原因,则通常是另一个 6 M 的因素。
  • 方法——生产过程及其贡献的服务交付过程。经常发现流程有太多的步骤、签核和其他活动,这些活动没有贡献或创造太多价值。如果没有精简、简化和标准化,流程可能会令人困惑且难以遵循。
  • 机器——用于生产的系统、工具、设施和设备。通常,由于技术或维护问题,机器、工具和设施及其基础支持系统管理不善或无法提供所需的输出。
  • 材料- 生产所需最终产品所需的原材料、组件和消耗品。材料经常因指定不正确、贴错标签、储存不当、过时等因素而管理不善。
  • 大自然母亲(环境) ——不可预测和不可控制的环境因素,如天气、洪水、地震、火灾等。虽然许多环境因素是可预测的并且可以被认为是可控的,但有些设施发现他们没有准备好一些不可避免的环境因素为了。
  • 测量——手动或自动检查和物理测量(距离、体积、温度、压力等)。有时,测量结果可能不一致,因此很难使用数据来形成有助于确定一致原因的可重复结论。

团队制作鱼骨图的过程

要制作鱼骨图,一个小组需要一块白板、活动挂图和一些记号笔。

  • 小组应该就问题陈述(效果)达成一致。
  • 在活动挂图或白板的中间右侧写下问题陈述,将其框起来,然后画一个水平箭头指向它。
  • 头脑风暴导致问题的主要类别。例如,从这些通用标题开始可能是有意义的:方法、机器(设备)、人员(人力)、材料、测量和环境。
  • 将原因类别写为主箭头的分支。
  • 集思广益可能的原因。问:“为什么会这样?” 在给出每个想法时,引导者将其写为适当类别的分支。如果原因涉及多个类别,则可以将原因写在多个地方。
  • 问一个问题“为什么会发生这种情况?” 再次。写出原因分支的子原因。继续问“为什么?” 并产生更深层次的原因。分支层表示因果关系。
  • 当小组没有想法时,将注意力集中在图表中想法薄弱的区域。

创建鱼骨图的有用提示

  • 组织一个合适的团队来承担创建鱼骨图的任务。直接或间接地从涉及的多个领域添加团队成员。直接处理手头问题的团队成员提供了宝贵的洞察力,而被考虑在外部寻找的团队成员可以帮助将偏见保持在最低限度。
  • 明确主要原因类别。6 Ms 是一个很好的起点,可以涵盖很多原因,使它们保持分类和组织;但是,为清楚起见,请确保在填写图表时获得更详细的信息。
  • 在分析鱼骨图时,不要忘记 5 个为什么技术。问“为什么?” 有助于更快地找到根本原因。
  • 考虑一种多投票技术,以帮助从每个人的想法中找出根本原因。这可能看起来像每个团队成员都确定了他们的三大根本原因。您可以要求每个团队成员在他们认为是需要解决的根本原因的每个“骨骼”或分支旁边放置三个复选标记或彩色粘点。
  • 如果您的问题看起来对于鱼骨图来说太复杂了,请考虑使用其他因果技术。如果您的图表变得杂乱无章,可能是时候考虑使用FMEA等根本原因分析工具了。

模块

通过模块完成设计

  • 模块(Module)用于存放领域中内聚在一起的类的容器
  • 将类放在不同的模块中的目的在于达到松耦合性 broadcasting

参考文献

  1. 《实现领域驱动设计》 — Vaughn Vernon

实体

什么是实体

  • 一个实体是一个唯一的东西,并且可以相当长的时间内持续的变化(修改)。
  • 唯一身份表识和可变性特征将实体与值对象区分开来
  • 在设计早期
    • 刻意把关注点放在能体现实体身份唯一性的主要属性和行为上
    • 同时还关注如何对实体进行查询
    • 刻意忽略掉次要属性和行为
  • 首先关注实体的本质特征:唯一标识、对实体的查找

创建唯一标识

  • 用户提供唯一标识:需要用户自己生成高质量的标识
  • 应用程序生成唯一标识:(节点当前时间,节点IP, UUID, GUID)
  • 持久化机制生成唯一标识:向数据库获取一个序列值或递增值,结果总是唯一的
  • 另一个限界上下文(BC)提供唯一标识:比如通过第三方匹配、模糊匹配,用户所选对象的标识将作为本地标识。

唯一标识创建时机

  • 实体的唯一标识的生成可以发生在对象创建的时候
  • 也可以发生在持久化对象的时候(并发时存在持久化之前多个相同空标识的不同实体冲突可能性)

参考文献

  1. 《实现领域驱动设计》 — Vaughn Vernon

值对象

值对象

我们应该优先选择值对象进行来建模而不是实体对象,值对象更容易创建、测试、使用、优化和维护。

值对象的特征

当决定将一个领域概念是否设计为一个值对象时,需要考虑它是否拥有以下特征:

  • 它度量或者描述了领域中的一件东西
  • 它可以作为不变量
  • 它将不同的相关的属性组合成一个概念整体
  • 当度量和描述改变时,可用另一个值对象进行替换
  • 它可以和其它值对象进行相等性比较
  • 它不会对协作对象造成副作用

不变性

除了创建方法之外,不能有其它方法可以对值对象进行修改

可替换性

如果一个实体所引用的值对象能够正确的表达其当前状态,那么这种引用关系可以维持下去。否则,
我们需要将整个值对象替换成一个新的值对象实例

值对象相等性

比较两个值对象实例时,我们需要检查这两个值对象的相等性。

无副作用行为

是指对象的方法只产生输出,不会修改对象的状态。

值对象的设计

  • 我们应该尽量让值对象仅依赖于自己的属性,并且只理解自身的状态。(尽量保障,自解性不对外耦合)
  • 要增加一个值对象的健壮性,那么传给值对象方法的参数依然应该是值对象
  • 对于已经真正简单并且具有整体意义的属性没有必要再封装成值对象的,单一的属性封装成值对象就过度设计了。
  • 可以参考策略模式进行实现

参考文献

  1. 《实现领域驱动设计》 — Vaughn Vernon

—  原创作品许可 — 署名-非商业性使用-禁止演绎 3.0 未本地化版本 — CC BY-NC-ND 3.0   —