Halia를 사용한 플러그인 지향 설계
오늘은 앱에서 "플러그인"을 관리하기 위해 구축된 확장 가능한 TS/JS 종속성 주입 프레임워크인 "Halia"를 소개하려고 합니다.
플러그형 앱을 빌드하면 장점이 있지만 다른 코드를 변경하는 코드를 동적으로 가져올 때 체계적으로 유지하기 어려울 수 있습니다.
예를 들어 다른 기능(또는 여러 기능)에 의존하는 기능을 빌드하는 경우 앱 전체에서 기능을 "분할 및 확산"하게 될 수 있습니다.
Halia는 다음과 같이 도움을 줄 수 있습니다.
Halia - Extensible TS / JS Dependency Injection Framework
With Halia, your app's core is packaged as a Plugin, and features are packaged as Plugins. Each Plugin can then be extended by other Plugins.
또한 URL에서 플러그인을 동적으로 로드하고, 플러그인을 동적으로 활성화하고, 사용자 수준 관리(예: 플러그인 스토어), 크로스 스택 및 크로스 에코 플러그인, 계약(재사용 가능한 플러그인 빌드용)을 위한 도구를 구축하고 있습니다.
Halia는 이 플러그인 트리 관리를 담당합니다. 예를 들어 어떻게 작동하는지 살펴보겠습니다.
예시
모두가 좋아하는 오리가 있습니다.
// duck-app.ts
export const getDuck = () => {
return "Quack";
}
폴을 제외한 모든 사람. Paul은 특별한 🦄 Disco Duck 🦄을 원하므로 다음과 같이 업데이트합니다.
// duck-app.ts
import { Paul } from 'client-list';
import { config } from 'config';
export const getDuck = () => {
if (params.client === Paul) {
return "Michael Quackson";
}
return "Quack";
}
코드는 Paul에게 적합하지만 더 복잡해지고 읽기 어려워지며 "클라이언트"개념과 결합됩니다.
대신 Halia 플러그인을 사용하여 이 기능을 캡슐화하고 주입할 수 있습니다.
// duck-app-plugin.ts
import * as DuckApp from './duck-app';
export const DuckAppPlugin: HaliaPlugin = {
id: "duckApp",
name: "Duck App Plugin",
install: () => ({
setGetDuck: (getDuck) => DuckApp.getDuck = getDuck
})
}
// disco-duck-plugin.ts
import { Paul } from 'client-list';
import * as config from 'config';
export const DiscoDuckPlugin: HaliaPlugin = {
id: "discoDuck",
name: "Disco Duck Plugin",
dependencies: [DuckAppPlugin.id],
install: ({ duckApp }) => {
if (config.client === Paul) {
duckApp.setGetDuck (() => "Michael Quackson")
}
}
}
그런 다음 스택을 빌드하고 코드를 호출할 수 있습니다.
// main.ts
import { HaliaStack } from Halia;
import { DuckApp } from './DuckApp';
import { DiscoFeature } from './DiscoFeature';
const buildApp = async () => {
// Initialize the Stack
const appStack = new HaliaStack();
// Register Plugins
appStack.register(DuckApp);
appStack.register(DiscoFeature);
// Build the Stack
await appStack.build();
// Call the Method
const duckApp = appStack.getExports(DuckApp.id);
duckApp.logNoise();
}
buildApp();
이를 통해 원래 코드는 그대로 유지되고 분리됩니다.
Paul이 더 이상 🦄 Disco Duck 🦄을 원하면 플러그인을 등록하지 않습니다. 추가 변경이 필요한 경우 고유한 요구 사항을 위한 전용 네임스페이스가 있습니다.
This is a simple example that can be solved in other ways. However, it demonstrates the general idea, and as features become more complex, we've found this pattern helps to keep things organized.
결론
종속성 주입 프레임워크(예: Angular, Nest 및 Halia)에 대한 자세한 내용은 다음 문서를 참조하세요.
패키지와 관련 개념을 즐기시기 바랍니다.
건배,
CR
이와 같은 기사를 더 보려면 Github , , , Reddit에서 저를 팔로우하세요.
Reference
이 문제에 관하여(Halia를 사용한 플러그인 지향 설계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codalreef/building-apps-as-a-tree-of-plugins-with-halia-1e5o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)