Предположим, у меня уже есть несколько файлов, сгенерированных генератором, и я хочу создать несколько подгенераторов, которые вставляют содержимое в эти файлы на основе некоторого шаблона содержимого.
Цель состоит в том, чтобы создать генератор многоуровневой архитектуры, состоящей из 3 слоев (для приложения Angular2, написанного на машинописном языке):
- прикладной слой
- слой метье и
- уровень бизнес-делегата
Для каждого слоя основной генератор должен сгенерировать все составляющие его файлы: файл модуля, файлы интерфейсов, ... Основные 3 файла, сгенерированные в этом процессе, выглядят так:
hero.applicatif.ts:
import { Injectable } from '@angular/core';
import { IHeroApplicatif } from './hero.applicatif.interface';
import { HeroMetier } from '../metier/hero.metier';
@Injectable()
export class HeroApplicatif implements IHeroApplicatif {
constructor(private heroMetier: HeroMetier) {}
}
hero.metier.ts:
import { Injectable } from '@angular/core';
import { IHeroMetier } from './hero.metier.interface';
import { HeroBusinessDelegate } from '../business-delegate/hero.business-delegate';
@Injectable()
export class HeroMetier implements IHeroMetier {
constructor(private heroBusinessDelegate: HeroBusinessDelegate) {}
}
hero.business-delegate.ts:
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { IHeroBusinessDelegate } from './hero.business-delegate.interface';
@Injectable()
export class HeroBusinessDelegate implements IHeroBusinessDelegate {
constructor(private http: Http) {}
}
Генерация этих файлов на основе шаблонов не представляет проблемы. Но я хочу, чтобы подгенераторы предлагали пользователю ввести имя метода, тип возвращаемого значения и параметры, поэтому подгенератор должен был модифицировать каждый ранее сгенерированный файл для вставки кодов, которые по умолчанию для каждого слоя передают вызов в следующий слой.
Предположим, что подгенератор предложил пользователю ввести метод с именем getHero, содержимое 3 файлов должно быть изменено следующим образом:
hero.applicatif.ts:
import { Injectable } from '@angular/core';
import { IHeroApplicatif } from './hero.applicatif.interface';
import { HeroMetier } from '../metier/hero.metier';
@Injectable()
export class HeroApplicatif implements IHeroApplicatif {
constructor(private heroMetier: HeroMetier) {}
getHero(id:number): Promise<any> {
return this.heroMetier.getHero(id);
}
}
hero.metier.ts:
import { Injectable } from '@angular/core';
import { IHeroMetier } from './hero.metier.interface';
import { HeroBusinessDelegate } from '../business-delegate/hero.business-delegate';
@Injectable()
export class HeroMetier implements IHeroMetier {
constructor(private heroBusinessDelegate: HeroBusinessDelegate) {}
getHero(id:number): Promise<any> {
return this.heroBusinessDelegate.getHero(id);
}
}
hero.business-delegate.ts:
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { IHeroBusinessDelegate } from './hero.business-delegate.interface';
@Injectable()
export class HeroBusinessDelegate implements IHeroBusinessDelegate {
constructor(private http: Http) {}
getHero(id:number): Promise<any> {
return this.http.get(...).toPromise();
}
}
Каков самый простой, безопасный и современный способ сделать это?