在当今快节奏的数字环境中,对自适应、可扩展和可维护的软件系统的需求比以往任何时候都更大。
传统的整体架构由于其刚性和复杂性而常常无法满足这些需求。 Harmony 是一个旨在实现高效、灵活的可组合平台的框架。
在本文中,我们将探讨由 Bit 提供支持的 Harmony 如何改变我们构建和维护现代应用程序的方式。
什么是和谐?
Harmony 是一个简约但功能强大的依赖注入框架,专为创建可组合架构而定制。通过使开发人员能够将独立开发的 Bit 组件拼接在一起,Harmony 使团队能够构建不仅是模块化的而且能够适应不断变化的业务需求的应用程序。 Harmony 支持全栈可组合性,使其成为将前端和后端功能集成到内聚平台的理想选择。
和谐的主要特征
可插拔方面:模块化业务功能(称为方面)可以轻松集成到平台中。
运行时灵活性:对 Node.js 和浏览器环境的官方支持确保了不同用例之间的兼容性。
为什么可组合性很重要
可组合性使组织能够:
快速适应:可以在不破坏现有系统的情况下独立添加或更新新功能。
促进可重用性:可以在多个项目中利用共享组件,减少重复并提高一致性。
促进协作:团队可以在独立的方面或组件上工作,而不会互相干扰。
构建和谐的可组合系统
如前所述,Harmony 系统的构建块是 Bit 组件。然而,由于 Bit 组件是任何软件单元的容器,因此并非每个 Bit 组件都可以。
Harmony 使用具有特定设计的组件来允许它们使用其他方面并提供“服务”。这些功能可以是仅前端、仅后端或全栈功能。
方面代表单个业务功能,可以将其插入更大的系统中以形成完整的解决方案,即新的应用程序。
方面通过注册到其“槽”API 来扩展其他方面。这种控制反转允许团队以最小的开销来组合功能或业务功能,因为方面负责集成,而不是组成它的系统。
例如,以下 Harmony 应用程序是一家冲浪服装在线商店。
负责该在线商店的团队决定在他们的网站上添加一个博客。在Bit平台上寻找合适的Aspect后,他们发现了这个Blog方面。他们决定使用它,并将其添加到 Hamrony 应用程序中:
/** * @coponentId: learnbit.apparel-waves/apparel-waves * @filename: apparel-waves.bit-app.ts */ // imports... import { SymphonyPlatformAspect } from '@bitdev/symphony.symphony-platform'; import { ApparelWavesPlatformAspect } from '@learnbit/apparel-waves.apparel-waves-platform'; import { BlogAspect } from '@learnbit/blog-pbc.blog'; export const ApparelWaves = HarmonyPlatform.from({ name: 'apparel-waves', platform: [ /** * ascpects register themsevles to the 'platform' aspect which * is the entry point for this application */ SymphonyPlatformAspect, { name: 'Apparel Waves', slogan: 'Making waves in fashion', domain: 'apparel-waves.com', }, ], /** * aspects can run in multiple runtime environments. here, aspects * provide functionalitis to the NodeJS services and to the web frontend apps */ runtimes: [new BrowserRuntime(), new NodeJSRuntime()], aspects: [ /* 'apperal waves' aspect extends the system with its * own unique functionalities. this aspect is maintained by * a team that composes the apsects for their own solution. */ ApparelWavesPlatformAspect, /** * the blog aspect extends the system with content * management capabilities. it is maintained by the blog PBC team. */ [ BlogAspect, { /** * the blog aspect also provide a config api for this app to use * in this case, since the the blog uses the Contenful platform, * the fusion team need to provide it with their own Contentful space ID */ spaceId: 'contentful-spaceId', }, ], ], }); export default ApparelWaves;
博客方面通过多种方式将自身注册到平台:
它通过用于内容检索的节点扩展了系统的 GraphQL 模式。这是在 NodeJS 运行时完成的。
它通过 /blog 路由扩展了系统的路由。这是在浏览器运行时完成的。
它使用附加项扩展了标题,即指向 /blog 的“博客”链接。这是在浏览器运行时完成的。
NodeJS 运行时
/** * @coponentId: learnbit.blog-pbc/blog * @filename: blog.node.runtime.ts */ export class BlogNode { constructor(private config: BlogConfig) {} async getBlogPosts() { const blogData = new BlogData(this.config); return blogData.getBlogPosts(); } static dependencies = [SymphonyPlatformAspect]; static async provider( [symphonyPlatform]: [SymphonyPlatformNode], config: BlogConfig ) { const blog = new BlogNode(config); const gqlSchema = blogGqlSchema(blog); symphonyPlatform.registerBackendServer([ { gql: gqlSchema, }, ]); return blog; } } export default BlogNode;
浏览器运行时
** * @coponentId: learnbit.blog-pbc/blog * @filename: blog.browser.runtime.ts */ export class BlogBrowser { constructor(private config: BlogConfig) {} static dependencies = [SymphonyPlatformAspect, HeaderAspect]; static async provider( [symphonyPlatform, header]: [SymphonyPlatformBrowser, HeaderBrowser], config: BlogConfig ) { const blog = new BlogBrowser(config); symphonyPlatform.registerRoute([ { path: '/blog', component: () => { return ( <apolloblogprovider spaceid="{config.spaceId}"> <bloglobby></bloglobby> </apolloblogprovider> ); }, }, ]); header.registerLink([{ label: 'Blog', href: '/blog' }]); return blog; } } export default BlogBrowser;
此示例中的博客方面使用 Contentful 内容管理系统。它为公司方面生态系统中购买的服务提供了一种连贯的“语言”,确保它们能够有效地沟通并无缝地协同运作。
/** * @coponentId: learnbit.blog-pbc/blog * @filename: blog-data.ts */ import { ApolloClient, InMemoryCache, HttpLink, gql } from '@apollo/client'; import type { BlogConfig } from './blog-config.js'; export class BlogData { constructor(private readonly config: BlogConfig) {} private contentfulClient = new ApolloClient({ link: new HttpLink({ uri: `https://graphql.contentful.com/content/v1/spaces/${this.config.spaceId}`, headers: { Authorization: `Bearer ${process.env.CONTENTFUL_ACCESS_TOKEN}`, }, fetch, }), cache: new InMemoryCache(), }); getBlogPosts = async () => { const { data } = await this.contentfulClient.query({ query: gql` query GetBlogs { pageBlogPostCollection { items { title slug author { name } } } } `, }); return data.pageBlogPostCollection.items.map((item) => ({ title: item.title, slug: item.slug, author: { name: item.author ? item.author.name : null, }, })); }; }
后续步骤
探索“博客”范围(与博客方面)
访问这些 Bit 范围来探索演示方面,并将它们分叉(复制)到您的 Bit 工作区以快速开始。
访问博客范围
探索“服装浪潮”范围(使用 Harmony 平台)
参观 Apparel Waves 范围
访问Bit的官方文档

少量。可组合软件。
Bit 是用于开发可组合软件的构建系统。
以上是构建和谐的组合平台的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。