使用UML和现代Java进行软件开发

Ťhis post was written by Bitbucket user Aleksandar Radulović.

随着技术的飞速发展,需要更有效地编写和维护软件,并与团队成员更好地进行交流。 作为开发人员,在急于按时完成任务时,我们很少考虑这些事情。

当前的软件开发实践很少包括软件建模。 即使使用模型,它们也通常被用作文档编制过程的一部分,并且似乎常常是一个负担。

本文的目的是描述一种不同的软件开发方法,该方法将可视化建模和代码生成置于开发过程的核心。 可视软件模型强调交流和内部软件设计,而不是简单地使事情正常工作。

我将描述我们如何通过使用UML模型作为使用Spring,Spring Data和Hibernate等框架创建现代Java后端应用程序的起点,使用代码生成器来自动化软件开发。

为了了解这种方法的潜力,我们需要考虑开发过程的不同基石以及该方法对它们的影响:

  • 统一建模语言(UML)-用于可视化软件系统和流程现代Java –现代Java生态系统的基本要素构建软件产品—更快地进行原型设计和维护团队动态-更好的沟通和更快的入职

让我们简要地介绍一下每个。

Unified Modeling Language

统一建模语言(UML)是用于建模软件的标准化可视语言。 开发它的初衷是雄心勃勃:为软件团队提供一种标准化的方法来可视化系统的设计,并提高团队对他们正在解决的问题领域的理解。 使用UML,可以直观地对概念,流程,状态机,交互或用例进行建模。

在日常工作中,我们采用的方法是使用类图对领域概念进行建模,并使用它们与状态机之间的关系建模流程。 我们还记录了不同的模型元素:类,接口,属性等,因此我们可以随时使用不同的格式和结构从模型中获取文档:javadoc或Swagger,仅提及两者。

这是UML类图的示例。

Modern Java

现代Java具有充满活力的生态系统。 学习编程语言虽然需要时间,但从该语言的生态系统中采用现代框架是另一条学习曲线。

Declarative programming

声明性软件开发实践的出现静默地为模型驱动的开发开辟了新途径。 与使用建模技术难以指定的命令式编程流程不同,声明性编程结构描述了可以由类图自然表示的软件结构方面。

当代Java开发在很大程度上依赖于声明式构造:最重要的是注释。 例如,不同的框架(例如Hibernate和Jackson)使用注释将对象模型映射到关系数据库或不同的导出格式(JSON,XML,Protobuf,BSON,CSV)。 Spring框架为RESTful端点的声明式开发提供了极大的支持,并且Spring Data引入了许多用于抽象化数据存储访问操作的基本构造。

像其他类型的编程一样,声明性编程的确要付出一定的代价-我们在应用程序中引入了不同框架和库的复杂性。 尽管这些依赖关系给项目带来了复杂性,但开发人员必须了解到,通过让他们专注于高级目标,他们可以为开发人员带来回报。

Code generators

声明式编程允许代码生成。 不必手工编写Java注释,只需在模型中将类标记为持久性,然后让代码生成工具为您创建Java Persistence API(JPA)注释就足够了。 不必编写有时会很麻烦的JPA注释行,代码生成可以发挥作用,而无需您打扰细节。 代码生成既可以内置到您正在使用的UML工具中,也可以作为插件使用。通常是从UML到代码的一键式过程。

这是从上面显示的UML模型生成的Java代码示例。

为什么要使用代码生成器?代码生成器将设计语言(UML)转换为实现语言(Java)。 它为我们的开发流程带来了自动化,从而降低了总体开发复杂性并简化了维护。 我们可以真正专注于对应用程序概念和服务进行建模,即我们要处理的核心抽象,而代码生成器则可以将模型与代码库同步。 此外,它促进了最佳实践的使用,并且极大地影响了代码库的质量和统一性。

Software Product

模型完成后,代码生成器将创建一个完整的启动项目,以反映我们的设计-因此我们可以专注于实现业务逻辑。 在软件维护方面,您可以更改设计,并让生成器将更改传播到您的代码库。 使用软件模型并使用代码生成器的这一过程可以快速进行原型设计,简化软件维护并为您提供更好的产品文档。

开始使用代码生成器时,很快就会出现一个问题:如何将代码中引入的更改与模型同步? 我们对这个问题的回答很简单:不要那样做。 该模型是一组抽象,应与实现分开存放。

这种单向转换通常称为“模型优先”方法,因为它显然将重点放在建模上,反之亦然。

另一方面,我们仍然希望能够修改生成的Java代码。 为此,我们依赖Java源文件中保留的部分,这些部分通过多次代码生成来保持自定义更改的完整性。

Development Team Now Has a Visual Map

在取得成果的每一天中,团队发展和沟通经常被低估。

使用代码生成使UML模型成为软件开发过程的核心。 产品的UML模型成为可视化的地图,随着工作的进行而发展。 有了此地图,不同的团队成员可以更好地了解软件并进行重点讨论。 现在,新团队成员的入职速度要快得多:他们无需阅读任何行和代码行,而是依靠实时地图来传达主意,而无需执行特定细节。

这种可视化的软件开发技术改变了团队成员的传统职责,增进了对领域的相互了解并提高了团队凝聚力。 使用模型驱动的开发时,软件开发人员的角色更接近业务分析师的角色。 另一方面,业务分析师清楚地了解软件的构建方式以及领域概念之间的关系。 最后,质量检查工程师对应用程序有更好的了解,并且所有团队成员都使用相同的语言。

Conclusion

尽管可以使用代码生成和建模来自动化软件开发的某些部分,但是在实践中我们并不经常看到这种情况–由于缺乏认识或缺乏资源来审查和研究新的工作方式。 如果本文中表达的想法使您对模型驱动的开发感兴趣,则可以采用多种方法进行进一步开发。

There are multiple providers of low-code development solutions. Mendix is one of them and has a comprehensive guide to low code development.

The best open-source example of this category of products is JHipster, a project that has been embraced by thousands of developers worldwide. The JHipster core team managed to connect experts from different areas of software development to make this amazing application generator.

Our own endeavor is in extending StarUML, our preferred tool for software modeling, with a plugin for code generation — this is the plugin used in the example in this post.

最后,无论您使用哪种工具和方法,软件开发都是人为事务,因此,它具有许多难以衡量和管理的方面。 模型驱动的开发不能代替缺乏质量要求,团队内部缺乏同情心或总体上缺乏组织文化的现象。 它补充了敏捷开发方法,但不能替代它们。

Author bio: 一种leksandar Radulović is a software developer and architect who developed Rebel, a code generator plugin for StarUML. When he’s not developing software, he enjoys reading classics like Shakespeare or is dancing the tango. Connect with him on Linkedin.

Love sharing your technical expertise? Learn more about the Bitbucket writing program.

Øriginally published at https://bitbucket.org on June 5, 2019.

from: https://dev.to//atlassian/software-development-with-uml-and-modern-java-bitbucket-1p9j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值