微服务体系结构通常从服务器端处理数据和逻辑开始,但在许多情况下,用户界面仍然作为一个整体来处理。但是,一种更高级的方法,称为micro frontends(微前端),是基于microservices设计应用程序UI。这意味着有一个由微服务生成的复合UI,而不是在服务器上有微服务,而只是一个使用微服务的单一客户端应用程序。使用这种方法,您构建的微服务可以同时具有逻辑和可视化表示。
图20显示了从单一客户机应用程序使用微服务的简单方法。当然,在生成HTML和JavaScript之间可以有一个ASP.NET MVC服务。这个图是一个简化,它强调您有一个使用微服务的单一(单片)客户机UI,它只关注逻辑和数据,而不关注UI形状(HTML和JavaScript)。
图20 使用后端微服务的单片UI应用程序
相反,复合用户界面是由微服务本身精确生成和组合的。一些微服务驱动用户界面特定区域的视觉形状。关键的区别在于,您有基于模板的客户端UI组件(例如,TypeScript类),这些模板的数据整形UI视图模型来自每个微服务。
在客户机应用程序启动时,每个客户机UI组件(例如,TypeScript类)都向能够为给定场景提供视图模型的基础设施微服务注册自己。如果微服务改变了形状,用户界面也会改变。
图21显示了这种复合UI方法的一个版本。这是简化的,因为您可能有其他微服务正在聚合基于不同技术的细粒度部分。这取决于您是在构建传统的web方法(ASP.NET MVC)还是SPA(单页应用程序)。
图21 后端微服务形成的复合UI应用程序示例
这些UI组合微服务中的每一个都类似于一个小型API网关。但在这种情况下,每个用户负责一个小的UI区域。
由微服务驱动的复合UI方法可能更具挑战性,也可能更少,这取决于您使用的UI技术。例如,在构建传统的web应用程序时,您不会使用与构建SPA或本机移动应用程序相同的技术(就像在开发Xamarin应用程序时一样,这种方法可能更具挑战性)。
eShopOnContainers示例应用程序使用单片UI方法有多种原因。首先,它介绍了微服务和容器。复合UI更高级,但在设计和开发UI时也需要更高的复杂性。其次,eShopOnContainers还提供了一个基于Xamarin的本地移动应用程序,这将使其在客户端更加复杂。
后面有章节会专门介绍微前端和可组合的UI以及MAMSA(应用和服务啮合的架构) 架构.