【企业架构设计模式】MITRE 设计模式

news2024/9/22 11:35:56

定义:

软件中的设计模式(通常)是简短的描述,用于捕捉过去证明是成功的实践。它们不是具体的软件,而是在某些情况下应用的一种模板。它们通常不是规定性的,而是建议性的,并且包括关于何时最适合使用它们的指导,并提供来自现有系统的示例。它们最重要的用途是描述对象或系统与其环境(即其他对象或系统)的交互。设计模式可以出现在系统设计的不同级别,从低级编程到系统系统。在后一层,它们与界面设计和耦合最为相关。

关键词:

耦合,设计模式,接口

MITRE SE 角色和期望:

MITRE 系统工程师 (SE) 应了解信息技术 (IT) 密集型系统的设计模式的一般原则和最佳实践。他们应选择和推荐适合应用程序的模式,了解出现的挑战和选择,就设计模式选择的适用性向政府提供建议,并了解企业环境中界面设计的问题和挑战。

背景


设计模式的概念通常归功于建筑师 Christopher Alexander 的工作,并被 Kent Beck 和 Ward Cunningham 改编为软件。1995 年,流行的书籍设计模式(其作者通常被称为“四人帮”(GOF))建立了一组持续使用的模式,并提供了描述模式的“模式”[1]。这 23 种模式分为创造型、结构型和行为型。已经定义了许多其他模式,以及其他类别,例如用户界面。

例如,一个 GOF 模式是抽象工厂,这是一种创建模式,它提供了一个用于创建新对象的接口,而调用者并不知道正在创建的对象的具体类型。这可以用于实现不同的外观和感觉,只需对程序进行最小的更改。其他示例是代理结构模式,其中一个对象成为另一个对象的代理(具有相同的接口),通常用于远程过程调用;单例模式,其中一个类只允许创建自己的一个实例,通常用于管理共享资源;和中介者行为模式,它允许类之间的松散耦合,因为它是唯一一个对其方法有详细了解的类。

与审查接口调用的细节相比,设计模式使对软件设计的审查和讨论能够在更高和更抽象的层次上进行——“你应该在这里使用单例模式吗?”或“抽象工厂模式有帮助吗?”

GOF 模式有几个共同点:它们是根据面向对象的软件定义的,它们(通常)描述一个对象与其环境(例如,其他对象)的交互,它们通常用在一个内部设计中。单个应用程序(即本地调用环境)。

然而,模式也可以在更广泛的设计层次上进行查看,而 MITRE SE 更经常地涉及到这方面。与审查组件之间或更高级别的系统之间的接口相比,MITRE SE 不太可能参与系统组件的详细内部工作的开发。这需要一组设计模式,这些模式专注于跨系统边界建立连接的方式。许多 GOF 模式不会直接应用。

企业工程面向服务环境中的设计模式


在为大型企业服务环境进行设计时,会出现两个考虑:(1)用户可能会以设计者没有预料到的方式将服务、接口等放在一起,以及(2)任何接口更改都会影响更大的用户集.深思熟虑地使用设计模式可以帮助解决这两个问题。扩展到企业的第三个问题是服务通常必须处理(当前)未知且潜在的大量用户。设计模式在直接处理这个问题时用处不大。

在企业环境中,当考虑系统到系统的接口时,可以扩展设计模式的概念,以包含有关如何管理接口中的耦合的更一般的指导。作为一般规则,只要可能,松耦合优于紧耦合。松散耦合意味着接口一侧实现的变化不会影响另一侧的实现。例如,在具有必须分发给用户的查找表的字段中使用代码不是松散耦合。此外,松散耦合的接口不应锁定会抑制可扩展性的特定限制。作为一个简单的例子,在联系信息的界面中,只允许一个(或两个)10 位数字的电话号码可能是不够的。一个更可扩展的接口可能允许任意长度的不确定长度的电话号码列表。

松散耦合将接口的用户与实现中的更改隔离开来。例如,一个设计良好的界面应该能够向界面添加更多参数,同时在没有新参数的情况下仍然可以生成和接受消息。这允许增长和创新,而不会使以前版本的界面的用户陷入困境。但是,另一方面,必须谨慎管理此扩展机制,否则仅参数不同的受支持接口的数量可能会变得很大,并且维护这些接口可能会淹没向后兼容性的价值。

示例接口标准化工作


Cursor on Target (CoT) [2] 是企业努力简化接口集合并提供松散耦合的一个示例。美国空军在许多组件之间拥有大量紧密耦合的点对点接口。John P. Jumper 将军(前空军参谋长)启发 MITRE 提出了一组数据元素,可以满足大多数用户的大部分需求。MITRE 研究了几个月的消息,发现有少量数据元素被重复使用。CoT 以易于生成和解析的 XML 格式对这些元素的定义进行了标准化。它提供了兼容的扩展,因此可以添加新元素而不会破坏现有用户。

国家信息交换模型 (NIEM) [3] 是一个基于 XML 的信息交换接口。它源于全球司法 XML 数据模型,是司法部和国土安全部之间的合作项目。它已被许多州和国防部采用。它提供了一个信息元素词汇表,合作伙伴可以从中选择创建消息。

与 MITRE 系统工程能力模型 (SE CM) 保持一致


具有设计模式的系统工程工作与 MITRE SE CM [4] 中的“架构”(第 2.3 节)和“软件和信息工程”(第 4.7 节)能力最接近。在前者中,设计模式可以成为讨论、可视化、比较和记录架构界面决策的有用工具。在后者中,因为设计模式现在是软件工程中一种成熟的范式,所以对技术和术语的理解有助于促进客户/用户和软件专家之间的沟通。

最佳实践和经验教训


以下实践规则可以看作是企业级以及详细实现级的接口设计模式。

  • 避免接口的复杂性。复杂的接口通常不能很好地扩展。复杂性被推送给所有用户,处理它的技能可能会有所不同。例如,不是以 10 种可能不同的格式提供纬度和经度,每种格式都必须由用户处理,而是以单一格式提供。如果一个接口过于复杂,则很可能会被误解,或者开发人员会复制用户端的次优实现。复杂性会导致错误,从而导致可能无法纠正的不良性能,甚至可能成为安全风险。

  • 尽可能使用松散耦合的接口。松散耦合意味着接口一侧实现的变化不会影响另一侧的实现。这为双方提供了极大的自由来进行改进并保持开发计划不连贯。严格的时序要求或软件版本要求可能是需要重新评估和放宽这种做法的考虑因素,但在这种情况下应该明确说明并记录在案。

  • 只有在性能需要时才使用紧密耦合的接口。紧密耦合会导致代码有缺陷和脆弱。紧密耦合的一个例子是 Link-16 接口,因为它是一个战术链接,所以使用一个数字来表示飞机的类型。这将用户与特定版本的转换表联系起来。如果表格在一侧更新,则用户可能会留下一个无意义的数字,直到表格也被更新。当然,更广泛的通信协议可以明确地携带飞机上的所有信息,但带宽限制可能会禁止将其作为替代方案。

  • 如果可能,从松散耦合开始设计。即使在使用紧耦合的情况下,初始设计也可以从松耦合接口开始。记录使用紧密耦合的原因。这类似于以独立于数据库管理系统 (DBMS) 的方式定义逻辑模式,但在依赖于 DBMS 的物理模式中实现它。对于系统的系统,这可能是一个有用的模式。

  • 关注接口中的数据一致性,而不是内部表示。在 1990 年代,政府组织试图在所有应用程序中强制执行数据一致性,甚至指定如何在应用程序及其数据库中表示数据。这从未实现。最近,重点是为数据交换创建通用定义,让应用程序可以自由选择如何在内部表示数据。事实证明,这是一个更容易实现的目标。

  • 认识到数据表示的差异是由数据的不同用途造成的。例如,考虑一把枪。射手想知道它的射程、口径等。托运人想知道它的大小、重量等。财务想知道它的成本、估计寿命等。同样的枪在不同的系统中自然会有不同的表示。强制所有系统上的所有特征将是繁重的。但是,可以通过组合模式来实现数据的意想不到的创新使用,以创建基于现有表示的新数据表示。

  • 在设计界面时,请考虑 80/20 规则。实现大多数用户大部分时间需要的 80%(左右)可能会更好,特别是如果这可以通过简单的界面快速完成。这减少了实施的成本和时间。

  • 构建扩展接口的能力。一些用户需要至少达到剩余 20% 的一部分,并且无论如何,界面必须随着时间的推移而增长和变化。松散耦合的接口应该构建兼容扩展的机制,以便可以在不影响不需要扩展的用户的情况下进行更改和添加。

  • 考虑可扩展接口的治理。接口的扩展会创建必须管理的多个版本/副本。考虑这样做的理由并理解这样做的影响。

  • 不要忘记界面中的语义理解水平。有人能够正确解析您的界面很好,但也必须对数据元素的含义达成一致。

  • 让开发人员参与系统接口的开发。那些将实现接口的人应该参与设计,因为他们可能对可能抑制可扩展性或导致其他问题的决策有洞察力。

本文 https://architect.pub/mitre-design-patterns
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
205920f795d0d7db80badce1f8a1b3ac.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

b0ba9c41b997423b3ee946e5cbe6da76.jpeg

QQ群

【285069459】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

088c832d7b33f2c5e327ccfb4a84787c.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

e9abbdc1b9ea0b47ebe72be2bd7199b4.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

d4f902aa4c0e0cbf096d43cab2517f9e.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
领英Harryhttps://www.linkedin.com/in/architect-harry/
领英群组领英架构群组
https://www.linkedin.com/groups/14209750/
微博‍‍【超级架构师】智能时刻‍
哔哩哔哩【超级架构师】

def9bb5d4439a98049acabc047459e66.jpeg

抖音【cea_cio】超级架构师

19571fec3d640535dd7a6e092ef7d497.jpeg

快手【cea_cio_cto】超级架构师

f420d72a9ccb0e138c1f3a98f9b972cf.jpeg

小红书【cea_csa_cto】超级架构师

efef3692e7273890c6c8514cac86f643.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站架构师实战分享https://architect.pub   
网站程序员云开发分享https://pgmr.cloud
网站首席架构师社区https://jiagoushi.pro
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue组件库Element-常见组件-对话框

Dialog 对话框 在保留当前页面信息的状态下&#xff0c;直接弹出对话框&#xff0c;告知用户并承载相关操作 具体代码关键如下&#xff1a; <template><div><el-row><!-- button 按钮 --><el-button>默认按钮</el-button><el-button…

Windows下编译安装VTK

本文旨在记录在Windows下编译安装VTK的流程。 零、环境 操作系统Windows 10编译器Visual Studio 2019 CommunityCMake3.24.2 一、下载代码 git clone https://github.com/Kitware/VTK.git cd ./VTK/ git checkout -b v9.0.0 v9.0.0 二、编译安装 Where is the source cod…

Redis【实战篇】---- 用户签到

Redis【实战篇】---- 用户签到 1. 用户签到 - BitMap功能演示2. 用户签到 - 实现签到功能3. 用户签到 - 签到统计4. 额外加餐 - 关于使用BitMap来解决缓存穿透的方案 1. 用户签到 - BitMap功能演示 我们针对签到功能完全可以通过mysql来完成&#xff0c;比如说以下这张表 用户…

1.数据类型

1、课后作业 1.给同桌讲讲交换两个变量的值 算法&#xff08;不管他愿不愿听&#xff09; 2.依次咨询问并获取用户的姓名、年龄、性别&#xff0c;并打印用户信息 可以先自己写一下&#xff0c;在参考一下我的代码&#xff1a; <!DOCTYPE html> <html lang"en&q…

【SLAM14讲】05 李群与李代数

在 SLAM 中位姿是未知的&#xff0c;而我们需要解决什么样的相机位姿最符合当前观测数据这样的问题。 一种典型的方式是把它构建成一个优化问题&#xff0c;求解最优的 R, t&#xff0c;使得误差最小化。 旋转矩阵自身是带有约束的&#xff08;正交且行列式为 1&#xff09;。它…

Zhong__Linux系统磁盘空间扩容和转移

时间&#xff1a;2023.07.07 环境&#xff1a;Ubuntu/Centos 目的&#xff1a;分配闲置空间到指定分区/将分区空间转移到指定分区 说明&#xff1a; 作者&#xff1a;Zhong QQ交流群&#xff1a;121160124 欢迎加入&#xff01; 在安装Ubuntu/Centos/Stream等系统时 有时对…

测试3年经验不到,来面试开口要25K,面完连10K都不想给···

前言 近期公司发展的不错&#xff0c;打算扩招&#xff0c;也面试了不少人&#xff0c;由于公司不是很大所以公司大部分的人员都是我面试的。 前两天来了一个测试工作才3年不到的小伙儿面试&#xff0c;前面问了一点测试基础的东西&#xff0c;还是能答上来的&#xff0c;不过…

趟路:centos7.6安装opengauss5.0.0企业版

版本选取 # 下载opengauss安装介质&#xff0c;截止2023年7月份最新版本长期支持版&#xff08;LTS&#xff1a;Long Term Support&#xff09;是5.0.0版本&#xff1b;此外&#xff0c;还有预览版3.1.1&#xff1b;这里建议安装openGauss 5.0.0 (LTS)。企业版&#xff1a;更像…

Windows故障转移集群

Windows2012作为根域 两台Windows2008加入域 创建三台Windows 分别是Windows2012和两台Windows2008 并选择其环境 创建三个十g的卷&#xff0c;连接至Windows2012 清理三台主机的后台数据 然后修改三台主机的IP 本机IP要相对应 Windows2008-1主机IP 第二块网卡不需要填写网…

液滴接触角边界曲线识别—巧用Ovito

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

Navicat 连接orcal11g

Navicat 连接orcal11g orcal12g 在不安装客户端的情况下是可以连接上的&#xff0c;orcal11g不行 1、下载客户端 官网传送门 传送门 csdn下载 传送门 2、配置客户端 解压下载的文件到D:\Program Files\PremiumSoft\Navicat Premium 16\instantclient_11_2 相同的可以备份原…

基于springboot+Mybatis+mysql+vue疗养中心管理系统

基于springbootMybatismysqlvue疗养中心管理系统 一、系统介绍二、功能展示1.登陆2.信息管理3.膳食管理4.护理管理5.床位管理6.后勤管理7.后勤管理 三、其它系统实现四.获取源码 一、系统介绍 系统主要功能&#xff1a; 信息管理模块&#xff1a;包括入住登记、退住登记、档案…

锐浪报表 Grid++Report 打印数据表图像

锐浪报表 GridReport 打印数据表时&#xff0c;特别是需要在Cell中打印图像时。例如&#xff1a; 二、图像的保存方式 1、图像以文件形式。保存在指定目录中。 2、数据表中&#xff0c;图像字段&#xff0c;仅保存图像的完整文件名&#xff08;指定目录&#xff09;。 3、打印表…

Windows Server 配置(七)VPN服务器的安装

VPN服务器的安装 VPN服务器是双网卡或多网卡的配置&#xff0c;一块网卡连接内网&#xff0c;另一块连接外网&#xff0c;同时外网或远程的客户端可以通过建立VPN连接访问到内网资源。 两块网卡分别设置好地址&#xff0c;外网网卡的地址是否能做的&#xff0c;或者是在路由器…

19 区域生长用于图像分割(matlab程序)

1.简述 区域生长法 区域生长的基本思想是将具有相似性质的像素集中起来构建成分割区域。以一组种子点开始&#xff0c;将与种子性质相似(如灰度级)的领域像素附加到生长区域的每个种子上 算法步骤 a.随机选取图像中的一个像素作为种子像素&#xff0c;并将其表示出来 b.检索种…

说一说spring boot服务的健康检测

一、判断服务的健康状态 服务健康与否&#xff0c;对我们的重要性&#xff0c;主要是体现在应用部署与服务调用。具体可以是如下&#xff1a; consul/nacos 服务注册中心api网关docker/k8s 容器部署发版结果应用监控 服务注册中心要对外提供服务&#xff0c;仅限于健康的节点…

天猫厨房大电市场分析(淘宝天猫数据)

如今&#xff0c;消费者对于厨房电器的需要不断增长&#xff0c;厨房电器领域的发展规模也越来越大。在国内市场中&#xff0c;由于中国人在烹饪时喜欢煎炒烹炸&#xff0c;油烟较重&#xff0c;因此&#xff0c;以油烟机和燃气灶为代表的厨房大电也成为千家万户不可少的厨用电…

2023黑马头条.微服务项目.跟学笔记(四)

2023黑马头条.微服务项目.跟学笔记 四 自媒体文章-自动审核今日内容介绍1.自媒体文章自动审核流程2.内容安全第三方接口2.1 概述2.2 准备工作2.3 文本内容审核接口2.4 图片审核接口2.5 项目集成 3.app端文章保存接口3.1 表结构说明3.2 分布式id3.3 思路分析3.4 feign接口 4.自媒…

常用的 34 个 Linux Shell 脚本,一定能帮到你!

作为一名 Linux 工程师&#xff0c;会写好的脚本不仅能提高工作效率&#xff0c;还能有更多的时间做自己的事。最近在网上冲浪的时候&#xff0c;也注意收集一些大佬写过的脚本&#xff0c;汇总整理一下&#xff0c;欢迎收藏&#xff0c;与君共勉&#xff01; &#xff08;1&a…

antd-React Popover 点击空白不隐藏

1.问题原因&#xff1a;自己写的点击事件把默认事件覆盖掉了&#xff0c;所以点击会不生效 2.解决方案&#xff1a;给按钮在添加一个焦点事件即可&#xff0c;当失去焦点的时候取反 3.代码如下 const [closeVisible, setCloseVisible] useState(false);<Popover content{c…