2017-11-16 20 views
0

platform/services/whatever과 같은 네임 스페이스를 통해 기능을 제공하는 기본 in-repo addon을 만들려고합니다. 내가 원하는 그 외에도선택적으로 기본 애드온을 확장하는 in-repo 애드온 구조를 구축 할 수 있습니까? 그러나 응용 프로그램은이를 인식하지 못합니까?

확장하거나 (어떤 식 으로든) 같은 서비스를 재개 다른 부가 기능의 IsEnabled는() 나는 platform-second/services/whatever

같은 이름으로 두 번째 부가 기능의 서비스를 호출 할 필요없이 함께 병합 할 모든 원하는 경우

그냥 깨끗한 추상화가 필요합니다. 이 방법을 사용하는 이유는 ENV 변수를 기반으로하기 때문에 index.html 및 다른 app.imports에 다른 항목을 작성/삽입해야하기 때문입니다.

그리고 나는 그것을 깨끗하게 유지하기 위해 별도의 작은 in-repo 애드온으로 완전히 분리되기를 바랍니다.

나는 앱이 platform을 알 필요가 없지만 일반적인 방법 인 platform을 사용할 수 있기를 바랍니다.

예를 들어 platform.services.whatever.myMethod()은 기본적으로 noOp 일 수 있지만 두 번째 추가 기능이이를 확장하고 구현하면 자동으로 해당 버전을 실행합니다. 나는 전혀 LOL 어떤 의미를 만들고 있어요 경우

원더

하나가이 설정을 구현하는 방법에 대한 팁이나 조언이 있으면 알려 주시기 바랍니다.

나는 현재의-REPO 애드온이 내장되어 있지만, 이상적으로는 기본 platform 부가 기능은 실제로 app 폴더 내용과 "확장"또는 "재정의"방법/속성의 다른 애드온을 가지고 하나가 될 수있을 것 addon의 객체는 해당 ENV 변수를 기반으로 isEnabled()이됩니다.

내가 그 파일의 기본 기능을 필요로하기 때문에 단순히 트리를 병합하고 원본 파일을 덮어 쓸 수 없다는 점을 덧붙여 야합니다.

그렇다면베이스의 한 메서드를 확장하면 platform.services.whatever.myMethod() 나머지 서비스 메서드와 속성도 여전히 필요합니다.

답변

0

귀하의 질문이 세부 사항에 대해 다소 모호하지만 걱정할 필요가 없으므로 너무 구체적이지 않습니다. 나는 약간의 아이디어를 던질 것이고 우리는 함께 유용한 결론에 도달 할 수있을 것이다.

런타임에 다른 객체가 필요한 경우, 구성에 따라 의존성 주입 컨테이너에 다른 버전의 서비스를 등록하는 것이 트릭이다. DI 기반 프로그래밍에서는 일반적입니다). 따라서 addon에 기본 서비스가 있고 특정 메소드의 다른 구현으로 기본을 확장하는 몇 가지 구체적인 구현도 있습니다. 그런 다음 앱에서 다양한 ENV 변수를 확인하고 삽입 할 서비스를 결정하는 초기화 프로그램이 있습니다. 항상 같은 키로 삽입하십시오 service:some-service. 따라서 baseClass = Ember.Object.extend()impl1 = baseClass.extend({methodToOverride: ...}을 사용하면 무시하는 메소드를 제외하고 모든 baseClass 메소드를 유지할 수 있습니다. 그래서 당신은 성공적으로는 빌드시의 경우 일부 부모 또는 아이가 service.someMethod

지금 처리 여부를 알 필요 호출을 피할 수, 다음으로는 POJO를 함께. 토지 (require()module.exports를 Node.js를하거나 번호를 가지고 ES6 상속을 얻는 방법 (prototype 상속, 계층 적 병합 pojos에 대한 확장, es6 extends) ... 선택하십시오.하지만 프로그래밍 디자인 패턴의 관점에서 볼 때, 여러분의 애드온이 인터페이스를 따르는 객체 생성을 추상화하는 팩토리를 노출해야하는 것처럼 보입니다. 따라서 옵션 객체를 취하고 올바른 impl을 반환하는 create 메소드가있는 모듈을 내 보냅니다.