面向高效协作的Mendix开发最佳实践

2023-10-31 21:04

本文主要是介绍面向高效协作的Mendix开发最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

圈内老同学都知道 Mendix 产品三大原则:速度(speed)、协作(collaboration)与治理(governance)。今天我们聊一聊那些有益于协作的Mendix 开发最佳实践,它和三大原则悉悉相关:

  • 执行最佳实践可以提升开发速度,和性能相关的最佳实践则保障应用运行速度

  • 遵循统一的开发实践让开发协作更加顺畅,增强可读性,降低理解成本

  • 最佳实践的贯彻是IT治理的应有之义,也是Mendix平台走向第二阶段(structure)应该规范的内容

无论你是身怀绝技的开发老司机,还是协调能力高超的项目经理或scrum master,还是雄心壮志又被现实压得喘不过气的开发团队负责人,为了更快速地交付高质量的应用都应该重视最佳实践的贯彻执行。

二、两个故事

一切要从本人亲身参与的两个PoC项目说起。

一个正式的PoC,有评估标准、实施范围、时间期限、交付形式、汇报呈现等关键要素。低代码更关乎做事方式而不是事情本身。因此,PoC中展示给客户开发方式和过程比展示最终应用更有意义。要让客户看清楚开发过程,必然需要主动呈现开发的工程目录、模型、页面、逻辑流、后台配置等实现细节,至少要把整体设计框架和关键模块、关键建模讲清楚。于是乎,PoC变成一场看谁能做出来,做得好,并且展示得好的比赛。

有幸这两个PoC项目中,和我搭配的开发同学都有1年以上Mendix开发经验,参与的实战项目超过5个。对于做出来大家信心十足(关键补充:用Mendix低代码的方式做出来)。然而,2个PoC项目在展示得好方面经历却完全不同。

第一个项目上,做完架构设计后我让开发同学自行去建模和配置,我开始准备汇报材料模板。每日召开项目短会,应用前端功能日渐丰富,进度在线。直到汇报前一天,当我拉取下最新工程文件,为关键实现细节截图说明时,瞬间傻了眼。除了架构设计时明确的多个模块在工程中如约实现外,具体到每一个模块内部的页面、微流、枚举值定义等完全就是横七竖八。我像是进入了一间陌生又昏暗的柴火间:一个完全无法理解的世界!页面上中英文混杂,大量的微流就叫 Microflow、Microflow_n的,数据实体的属性名称也是单个字母认识连起来猜不出意思的那种。要是把这些凌乱不堪的现场截图放进PoC汇报,客户在看懂Mendix是如何开发的之前会留下Mendix开发就是打游击战的印象。为改变这一局面,我先是花了近一个小时艰难地从菜单到页面、数据源到微流、页面动作到微流,利用where-used/usage 功能,顺腾摸瓜去理解开发的实现脉络,由语义反推各种无效命名的真正含义,同时在有把握的地方按照最佳实践直接修改。然后,再花了一个多小时向两位开发同学询问不那么直观的实现细节,并让他们自行修改不规范的地方。3个小时后,我终于可以开始截图向客户说明这个应用的实现方式,此时时间已经是凌晨。

有了前车之鉴,第二个项目在动手开发前,项目团队先就开发方式做了对齐。好在这两位开发同学所在小组本身对开发最佳实践有所重视,再次强调了几条重要最佳实践后,没有出现前一个项目上的问题。当我进入这个有着5个模块,10多个核心业务对象,30多个页面,40多条微流的工程中,借助Mendix本身可视化特点和开发友好的导航功能,穿梭其中游刃有余,以至于无需和开发同学语言沟通我就能把每处实现细节快速看明白。这就是Mendix的魅力所在,这是一种美!这也正是我们要在PoC中传达给客户的!

从这两个项目经历中,我深刻认识到,开发最佳实践关乎沟通协作,关乎应用的可持续运维和迭代。

三、事关协作的开发最佳实践

本文不准备罗列所有Mendix开发最佳实践,而是聚焦在那些能促进高效协作的最佳实践。

1. 预先确定开发语言

预先确定将用于开发应用程序的语言。这样你就有了一种语言用于模块、实体、微流、页面等。这里的关键考量点有两个:一个是开发人员的语言习惯,比如中文之外是否具备英文表述能力。另一个是应用面向用户的首选语言。考虑到平台标准模块是英文的,建议首选英文,并开发过程中保持一致性。应用需要呈现中文时,可在翻译中心统一翻译词条,参考这里。

2. 实体命名

实体反映了人们可以与之相关的现实世界对象。因此,实体名称还应反映该对象并确定其用途。有时会有特定于应用程序的异常会导致创建其他类型的实体,但这取决于您。实体的名称是单数的,因为对象是实体的单个实例。一个很好的例子是使用Customer而不是Customers 。此外,我们建议避免在实体名称中使用缩写、下划线、数学字符或任何其他特殊字符。实体名称也使用 UpperCamelCase,例如HousekeepingRecordLogEntry

3. 实体属性

实体属性应该反映人们可以关联的真实世界对象的属性,并符合该属性的用途。我们建议避免在名称中使用缩写、下划线(下一段描述的情况除外)、数学字符或任何其他特殊字符。实体属性应使用 UpperCamelCase,例如FirstNameTelephoneNumber 。不反映业务相关数据但仅出于技术原因需要的属性应以下划线 ( _ ) 开头。

4. 模块化组织应用

模块化开发是Mendix开发的重点特征,模块化管理也是大型应用开发的首选。Mendix支持模块层级的导入导出进而进行复用。因此,在规划应用开发时,首先要进行模块化设计。比如,通常把接口相关功能归为一个模块,把组织成员管理相关的归为一个模块。

5. 文件夹设置

当一个应用程序变得越来越大时,无组织的页面、逻辑流堆在一起非常影响可读性和可维护性。巧用文件夹可以有效解决这一问题。通过使用良好的文件夹结构,您将提高应用程序的可维护性;您将能够更快地找到所需的文件,从而能够更快地开发和修复。将文档最佳地分组到文件夹中取决于环境和应用程序的功能。我们建议以适合您应用的方式组合以下指南。

  • 流程相关来源

每个应用程序都由进程组成。将这些流程的文档组织到反映各个流程及其步骤的文件夹中。

  • 实体相关来源

每个应用程序都有特定实体所需的文档。考虑用于维护的概述页面、防止提交的验证微流或其他事件触发器。这些类型的文档应该被组织到一个以实体命名的文件夹中。可选地,子文件夹可用于组织,例如,事件页面

6. 微流的命名

通常,微流名称应包括触发它们的事件类型、正在处理的主要实体的名称以及正在执行的操作: {PREFIX}_{Entity}_{Operation} 。例如, ACT_Vendor_StartWorkflow

与实体处理程序相关的微流程应具有以下前缀:

事件类型字首
提交前BCO_{实体名称}
提交后ACO_{实体名称}
创建前BCR_{实体名称}
创建后ACR_{实体名称}
删除前BDE_{实体名称}
删除后ADE_{实体名称}
回滚前BRO_{实体名称}
回滚后ARO_{实体名称}

页面有许多可以触发微流的事件。有关示例和前缀,请参见以下列表:

事件类型字首用于
在进入事件OEN_{目的}输入元素
更改事件OCH_{目的}输入元素
休假活动OLE_{目的}输入元素
数据源DS_{目的}数据视图、列表视图、数据网格、数据模板网格
操作按钮ACT_{目的}菜单项、导航项、微流和操作按钮、下拉按钮
(历史上使用“IVK_”)

更多可以参考这里。

7. 枚举类型的命名

枚举应使用前缀标识。

文件类型字首
枚举ENUM_
8. 页面的命名
  • 页面使用后缀来表示它们的用途。
  • 显示单个实体概览的页面应具有_Overview后缀。
  • 用于创建、编辑或查看实体数据且不属于流程的页面应具有后缀_New_Edit_NewEdit_View
  • 用于选择一个对象的页面具有_Select后缀,其中多对象选择页面应具有后缀_MultiSelect
  • 用作工具提示页面的页面应具有后缀_Tooltip
  • 执行工作流中的用户任务时调用的页面具有后缀_Workflow 。每个用户任务有一个任务页面。这些页面始终具有 WorkflowUserTask数据视图,并且特定于执行工作流任务。
页面目的后缀
列出单个实体类型的对象_Overview
创建一个对象_New
更新对象_Edit
创建或更新对象_NewEdit
查看对象(只读)_View
选择单个对象_Select
选择多个对象_MultiSelect
工具提示_Tooltip
与用户任务交互_Workflow

9. 其它建议

  • 及时清理工程中未使用到的实体、页面、微流

  • 杜绝直接修改系统模块的页面和微流,避免下次模块升级时被覆盖,可以在副本上修改

  • 微流布局宜平衡、美观,超过15个组件的微流考虑使用子微流,增强可读性

四、案例展示

下面以Mendix 现场服务管理APP为例,一起看看以上开发最佳实践的落地效果。

  • 模块化开发和工程目录组织形式

modularized.png

  • 方便“望文生义”的实体和属性命名,一眼就能理解业务含义

entity.png

  • 微流和页面命名规范,有实质意义,相同前缀得到合理排序

microflow1.png

microflow2.png

五、总结

每一种开发语言都有自己的开发最佳实践,了解并践行开发最佳实践有助于增强工程的可读性、可维护性,有利于团队沟通和协作。在开发者个人层面,遵循最佳实践体现了开发者对语言的掌握程度、成熟度,某种程度也是开发者个人修养的体现。Mendix 倡导面向协作的低代码开发,提供了大量最佳实践供开发者参考,不管是刚入门的新手还是经验开发者,都应该重视最佳实践的学习和运用。

关于Mendix公司

在一个数字化先行的世界中,客户希望自己的每一项需求都得到满足,员工希望使用更好的工具来完成工作,而企业意识到自己只有通过全面数字化转型才能生存并取得成功。Mendix公司,a Siemens business正在迅速成为企业数字化转型的推动者。其业内领先的低代码平台和全方位的生态系统整合最先进的技术,帮助企业创造出提高互动性、简化操作和克服IT瓶颈的解决方案。Mendix公司以抽象化、自动化、云和协作为四大支柱,大幅提升开发者的生产力,并且依靠自己的工程协作能力和直观的可视化界面,帮助大量不熟悉技术的“公民”开发者在他们所擅长的领域创建应用程序。Mendix公司是权威行业分析师眼中的领导者和远见者,也是一个云原生、开放、可扩展、敏捷和饱经考验的平台。从人工智能和增强现实,到智能自动化和原生移动,Mendix公司已成为数字化先行企业的骨干。Mendix公司企业低代码平台已被全球4000多家领先的公司采用。

这篇关于面向高效协作的Mendix开发最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用