三层架构,Spring和Angular

Three-tier architecture, Spring and Angular

我对三层体系结构有疑问。

我有一个使用Spring Boot和Angular的应用程序。
我怀疑是否 :

  • 表示层=角度
  • 应用层=弹簧靴

或者,如果有两个三层体系结构:角形是一个,弹簧靴也是一个。

我知道Angular从技术上讲不是三层体系结构,因为它不是与数据库交互的,这就是为什么我要说它只是表示层。 但是我还没有阅读任何证实它的内容。


简短的答案:这取决于您的实现质量。

对于更长的答案,我想先总结一下软件体系结构的目的。在软件工程中将项目分为多个层次的目的是在您和您的团队开始编码之前"物理地"分离代码。预先确定体系结构的过程可以使您深入了解整个项目的结构,以及可以/应该使用哪种语言或框架。

三层体系结构的示例:

  • 表示层:应用程序的前端。可以在HTML / CSS或Angular或React之类的Web框架中。您希望该层显示它检索到的数据并尽可能少地"思考"。
  • 应用程序层:这是应用程序的中间件。可以用您喜欢的任何语言来实现,例如PHP,Java,C#,Python等。该层是软件的"引擎",它将表示层连接到数据层。您不希望在此层中有任何视图或UI,因为这是班组的"伟大思想家"。
  • 数据层:您的数据库或存储系统。可以在MySQL,PostgreSQL,MongoDB等中使用。应用程序层将通过API调用来访问数据(注意:API调用本身是由表示层触发的,但是表示层不知道应用程序层将要做什么)进行此调用,这是两者之间的黑匣子。

出于语义原因,我不能说Angular / Spring是"三层体系结构",因为这完全取决于您的实现。如果您愿意,两者都可以是三层。但是,在您的情况下,正确地说是Angular应该是表示层,而Spring Boot应该是应用程序层。

将Angular用作表示层(仅限于表示层)非常有意义。您的Angular应用程序不应在乎收到的数据,而应仅显示它。因此,Spring Boot将成为将数据从数据层传递到表示层的组件。

一个好的实现可以使三层体系结构互换。不想再使用Angular吗?只需升级到另一个框架,客户看到的数据将保持不变。这就是精心设计的体系结构的强项,以及您希望通过它实现的目标。

维基百科对软件体系结构的描述如下:

"Software architecture refers to the high level structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations. The architecture of a software system is a metaphor, analogous to the architecture of a building. It functions as a blueprint for the system and the developing project, laying out the tasks necessary to be executed by the design teams."

因此,最后回答您的问题:您的设置确定您的体系结构。如果您将Angular用作UI,将Spring Boot用作Services的集合以及用于存储数据的数据库,则将具有三层体系结构。如果您决定在不带Angular的Spring Boot中生成前端,您仍将具有三层架构,但是Spring Boot占据了其中的两层(这就是Spring严格遵循MVC模式的原因)。


Spring MVC + Angular单页Web应用程序的体系结构
表单密集型企业级应用程序非常适合构建为单页Web应用程序。与其他更传统的服务器端体系结构相比,主要思想是将服务器构建为一组无状态的可重用REST服务,并从MVC的角度将控制器从后端移出并移至浏览器中:

enter image description here

客户端具有MVC功能,并包含在视图层,控制器层和前端服务层中分隔的所有表示逻辑。初始应用程序启动后,只有JSON数据通过客户端和服务器之间的连接。

来源:https://blog.angular-university.io/developing-a-modern-java-8-web-app-with-spring-mvc-and-angularjs/