From 6b4ea7a0aff31fcd232928120c3c87f416412e15 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Mon, 1 Aug 2022 01:41:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcommon/comp?= =?UTF-8?q?onents/=5Forganizing=5Fintro.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_common/components/_organizing_intro.md | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/get-started/_common/components/_organizing_intro.md b/get-started/_common/components/_organizing_intro.md index 50f7b8de..8be5db0c 100644 --- a/get-started/_common/components/_organizing_intro.md +++ b/get-started/_common/components/_organizing_intro.md @@ -1,24 +1,37 @@ + +系统中的所有组件组成一个有根的**组件实例树**。树中的父组件负责将其他组件的实例声明为其子组件并为它们提供功能。同时,子组件可以向父组件公开功能。这些组件实例和功能关系构成了**组件拓扑**。 + +任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制哪些功能流入和流出其组件的子树,从而创建功能边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开功能的外部组件。 + +![图表展示了组件实例被组织成一个树,父组件通过“功能路由”确定每个子组件可用的功能。](/get-started/images/components/component-topology.png){: width="616"} + +在上图中,`fuchsia.example.Foo` 协议功能通过组件实例树从提供者路由到客户端。组件使用 `use` 关键字声明它们**需要**的功能: + +```json5 +{ + // 程序运行的有关信息。 + program: { + // 使用内置的 ELF 运行程序来运行二进制文件。 + runner: "elf", + // 运行该组件的二进制文件。 + binary: "bin/client", + }, + + // 此组件所需的功能。 + use: [ + { protocol: "fuchsia.example.Foo" }, + ], +} ``` + +组件使用组件清单中的 `capabilities` 部分声明它们实现或**提供**的功能。这使得组件框架知道该功能和它的提供者。请查看下面的 `provider.cml` 示例: + +```json5 +{ + // 程序运行的有关信息。 + program: { + // 使用内置的 ELF 运行程序来运行二进制文件。 + runner: "elf", + // 运行该组件的二进制文件。 + binary: "bin/provider", + }, + // 此组件提供的功能。 + capabilities: [ + { protocol: "fuchsia.example.Foo" }, + ], + // 通过此组件路由的功能。 + expose: [ + { + protocol: "fuchsia.example.Foo", + from: "self", + }, + ], +} +``` + + +`expose` 关键字使这个组件的功能通过它的父组件向其他领域提供,这也可能包括这个组件的子组件提供的功能。在这种情况下,功能的来源是 `self`,因为这个组件是提供者。 + +父组件控制领域内的**功能路由**,创建从客户端组件到提供者的显式路径。请查看以下 `parent.cml` 清单示例: ```json5 { @@ -96,18 +160,28 @@ example `parent.cml` manifest: } ``` + + + +父组件在领域中声明一组子组件,并使用 `offer` 关键字将功能路由到它们。用这种方法,父组件就决定了每个子组件功能的范围和来源。这也使拓扑中的多个组件能够提供相同的功能,因为组件框架依赖于显式路由来确定如何解析来自每个客户端的请求。 + +注意:要获取关于组件组织的更多详细信息,请参阅[组件拓扑](/concepts/components/v2/topology.md).