深入探讨Backstage架构:软件实体与React组件的交互

大家好!今天,我们将深入探讨Backstage的核心概念之一——“组件(Component)”如何在两种不同的上下文中被使用。🚀

这是Backstage初学者最容易混淆的部分之一。然而,如果能清晰地理解这两种“组件”的含义,您将能更深入地掌握Backstage的架构和实际应用方案。今天,我将通过这篇文章彻底消除您的困惑!💡


🏗️ Backstage中“组件”的两种含义

在Backstage中,“组件”一词主要在两种上下文中被使用。一种是作为软件目录实体的kind: Component,另一种是构成前端UI的React组件。准确区分这两者至关重要。


1. kind: Component (软件目录实体) 🧩

第一种含义是指Backstage软件目录(Software Catalog)模型中最基本的实体类型。它代表了通过实际代码实现的软件单元,例如您的服务、库、网站等。

✅ 主要特点

  • 定义: 在catalog-info.yaml文件中定义为kind: Component。
  • 作用:
  • 代码单元: 表示执行特定业务逻辑的微服务、Web应用程序、库、移动应用程序等。
  • 所有权: 包含负责此服务的团队 (owner)、所属系统 (system) 等元数据。
  • 可见性: 在Backstage UI中,它作为连接点,让您可以一目了然地查看该组件的TechDocs、CI/CD状态、警报、仪表板等。
  • 示例:
  • payment-service (微服务)
  • user-dashboard-frontend (前端Web应用)
  • shared-logging-library (可重用库)

📊 kind: Component YAML示例

YAML

apiVersion: backstage.io/v1alpha1
kind: Component         # 👈 这是第一个“Component”的含义。
metadata:
  name: order-processing-service
  description: 고객의 주문을 처리하고 결제 시스템과 연동하는 백엔드 서비스
  annotations:
    github.com/project-slug: example-org/order-service
spec:
  type: service          # 组件的类型(例如 service, website, library 等)
  lifecycle: production
  owner: team-nova       # 负责此服务的团队
  system: e-commerce-platform # 此服务所属的系统

在这里,kind: Component指的是“订单处理服务”这个实际的软件代码块


2. 前端React组件 (UI构成元素) 🎨

第二种含义是指作为Backstage前端用户界面(UI)构成块的“React组件”。这与ReactJS框架的通用用法相同。

✅ 主要特点
  • 定义: 用TypeScript/JavaScript编写的React代码文件(tsx, jsx)。
  • 作用:
  • UI渲染: 负责在屏幕上显示特定功能或处理用户输入的UI元素。
  • 可重用性: 将按钮、卡片、表格、图表、特定实体的详细信息面板等各种UI构成元素制作成可重用单元。
  • 插件开发: 开发Backstage插件时,您创建的所有UI都是由React组件组合而成的。
  • 示例:
  • (渲染整个实体详情页面的组件)
  • (显示TechDocs文档的卡片组件)
  • (显示成本分析仪表板的组件)

🖥️ React组件代码示例

TypeScript

// packages/app/src/components/catalog/EntityPage.tsx (Backstage应用的一部分)

import React from 'react';
import { EntityPageLayout } from '@backstage/plugin-catalog';
import {
  EntityAboutCard,
  EntityLinksCard,
  EntityCatalogGraphCard,
} from '@backstage/plugin-catalog';
// ... 并导入其他各种React组件。

export const customEntityPage = (
  <EntityPageLayout>
    <EntityPageLayout.Content>
      {/* 👈 在这里,EntityAboutCard是一个React组件。 */}
      <EntityAboutCard variant="gridItem" /> 
      <EntityLinksCard variant="gridItem" />
      <EntityCatalogGraphCard variant="gridItem" />
    </EntityPageLayout.Content>
    {/* ... 其他标签页和组件 ... */}
  </EntityPageLayout>
);

在上面的代码中,EntityPageLayout、EntityAboutCard等都是React组件,它们是构成Backstage UI的视觉元素。


🎯 正确连接两种“组件”的含义

现在,理解这两种“组件”的含义如何相互连接至关重要。

  • kind: Component (软件实体)是注册在Backstage目录中的实际软件
  • React组件 (UI构成元素)的作用是获取该kind: Component实体的信息,并在Backstage UI中以视觉方式展示

例如,当一个名为“order-processing-service”的kind: Component实体注册到目录中时,Backstage前端的React组件以及其中包含的、等React组件会读取该实体的元数据,并将其精美地渲染到屏幕上。✨


🏁 结论:通过上下文区分“组件”

在Backstage中,“组件”一词根据上下文具有以下两种含义:

  1. 软件目录中的kind: Component: 代表您的应用程序、服务、库等实际软件代码单元的实体
  2. 前端React组件: 用于创建Backstage UI并以视觉方式表示实体信息的UI构成元素。

准确区分和理解这两种含义,将极大地帮助您更清晰地理解Backstage的架构,有效地构建适合您组织的目录,并在需要时亲自开发插件!🚀


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注