From Architecture to Code: Analysis of the Latest Trends in Software Development

Trends in Software Architecture and Design

In this April, InfoQ released a report on the trends in software architecture and design. In this report, InfoQ divided software architectures into four categories, which are innovators, early adopters, early majority, and late majority, as shown in the following figure from left to right. This report has shown that many technologies, such as microservices and DDD, have become popular and have gone mainstream in the software development field. For early majority and late majority, many architectures and designs are related to DDD, such as microservices, command query responsibility separation (CQRS), and event-driven architecture.

Domain-Driven Design (DDD)

There are various practice guides for Domain-Driven Design (DDD) available on GitHub, but we will not be covering them in detail in this article. According to the following figure, you can use DDD to address issues that range from architecture and design to code. Therefore, DDD is a popular method in the entire software development lifecycle. An important theoretical foundation that guides the classification of microservices is DDD. Previous discussions on DDD mainly focused on how to identify bounded contexts and how to use tactics and strategies. In this article, we will describe a mainstream trend, which is the combination of DDD and Reactive.

Reactive

DDD divides an application into multiple small bounded contexts (multiple applications. Let’s see how the applications can communicate with each other. Reactive has not only provided guidelines for communication between different applications, but also provided corresponding technical solutions. For example, Async supports fully asynchronous operations, which are based on asynchronous technologies. In addition, the observable mode, which was first put forward by Microsoft, is widely used in architecture and design. In this mode, if a table changes, other tables will change accordingly. Java programmers have noticed that Spring is emphasizing on Spring Reactive, and many technical solutions are related to Reactive. In addition, message and event-driven architectures provide the basis for designing FaaS and cloud-native solutions.

RSocket

In the trend chart of InfoQ software architecture and design, you can see functional programming in the early adopters, Reactive programming in the early majority, and RSocket and Reactive Streams in the innovators. In this section, we will describe RSocket, which may be unfamiliar to you. If you pay attention to the official website of Spring, you may know that Spring V5.2 has already provided built-in support for RSocket. However, there are not many related technical documents. As we mentioned in the preceding section, Reactive provides a theoretical foundation for the communication model of DDD. Therefore, the RSocket protocol is used to design a communication model based on Reactive theoretical foundation.

Service Mesh

Back to the graph from InfoQ at the beginning of this article, we can see that most of the trends in software architecture and design are related to cloud native. Among these trends, concepts such as serverless, service mesh, HTTP/2, and gRPC have gained high popularity, and service mesh has occupied an important position. Typical service mesh architectures still use the typical sidecar pattern that is based on Istio and Envoy.

FaaS

An enterprise may run a few core systems but along with long-tail applications. If ideal FaaS solutions were formerly unavailable, the enterprise might build a large and comprehensive system to integrate these small functions. This could lead to difficulty in modifying the code, cause many troubles, and impede technical innovation. The advantage of FaaS is that functions can be deployed at edge locations, such as content distribution network (CDN) edge nodes. In terms of communication, FaaS solutions mostly adopt message- and event-driven architectures, and many current communication protocols use gRPC. FaaS itself requires a quick response speed, so it has certain requirements for communication protocols. The gRPC interfaces are closer to the infrastructure layer, on which Reactive gRPC is built to allow you to manipulate gRPC through Reactive. However, when you write code, you may not know that the infrastructure layer is based on gRPC. Another trend in technologies is AsyncAPI. In fact, many frameworks that you use at work can directly generate OpenAPI from code, such as springdoc-openapi.

Code Intelligence

Code intelligence is also a trend in technologies. After you select one or more of the architectures that we mentioned earlier to meet the demands of enterprises, the next steps will involve code. In this section, we will focus on two points: code generation and hand-written code. Code generation, which can be likened to scaffolding, is the process that can quickly generate the framework without the need to write configuration items. It is currently a mature technology. You can use a variety of tools for code generation, such as IntelliCode, Codota, Kite, and various Cloud IDEs. Software development technologies are frequently changing, with new frameworks or technologies being released every four or five months. This is challenging for developers, who are concerned about efficiency. Therefore, even with the help of code AI, developers still rely to some extent on features of Cloud IDEs. Cloud IDEs can quickly catch up with the advancement of some technologies. Therefore, with Cloud IDEs, you can meet new customer demands in a short time.

Code Generation and IDE

At present, many code generation tools are available to help you address the framework generation issues. For example, the start.spring.io scaffolding is an extensible code framework generator. Code generation is a built-in annotation mechanism in Java. You may not have noticed, but this mechanism is used in many scenarios to generate high-performance code. In addition, many IDEs, such as JetBrains and VS Code, have integrated code generation tools to help developers quickly generate code frameworks.

Original Source:

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store