Serbroda
Neues Mitglied
Hallo zusammen,
ich arbeite gerade an einer Anwendung, die sowohl als Web-App, als auch als Desktop Anwendung verfügbar sein soll. Ich versuche möglichst wenig doppelten Code zu schreiben und dieselbe Codebasis zu haben.
Mein Tech-Stack sieht aktuell wie folgt aus:
GUI: Angular 9
Desktop Anwendung: Electron
Backend für Webapp: Nodejs mit Koa.js Server (Alternative zu express)
Für die Desktop Anwendung wird das Angular Kompilat in das Electron Projekt kopiert und dort direkt die
Zum Beispiel Datenbankzugriffe werden auf Electron-Seite in dem Main Prozess ausgeführt und über IPC zwischen Angular und Electron ausgetauscht. Für die Web-App entsprechend über REST-Calls.
Das bedeutet, und damit komme ich bald zu meiner Frage, muss ich Angular-Seitig immer zwei Services bauen. Für Electron einen der, zum Beispiel Datenbankabfragen, über IPC kommuniziert, für die Web-App einen, der über REST kommuniziert. Also habe ich an diesen Stellen aktuellen immer doppelten Code.
Beispielhafter Code für Services, die Angular-Seitig den Datenbankzugriff regeln:
Ich könnte, und das würde generell alles etwas vereinfachen, den Http-Server der Web-App auch aus der Electron Anwendung starten, hätte damit also auch einen Endpunkt, den ich aus Angular ansprechen kann. Somit bräuchte ich für alle Prozesse, die Angular-Seitig getriggert und Backend-Seitig ausgeführt werden müssen, nur noch einen anstatt zwei Services erstellen und zwar nur einen für REST.
Meine Frage jetzt ist: Findet ihr es legitim, dass eine Desktop-Anwendung einen HTTP-Server startet und sich selbst dagegen connected und wenn die Anwendung geschlossen wird diesen wieder stoppt? Ich weiß nicht, ob das ggf. Antipattern ist, aber ich glaube pgadmin von PostgreSQL macht das ähnlich.
Ich hoffe meine Beschreibung wird klar und danke euch im Voraus!
Gruß
Danny
ich arbeite gerade an einer Anwendung, die sowohl als Web-App, als auch als Desktop Anwendung verfügbar sein soll. Ich versuche möglichst wenig doppelten Code zu schreiben und dieselbe Codebasis zu haben.
Mein Tech-Stack sieht aktuell wie folgt aus:
GUI: Angular 9
Desktop Anwendung: Electron
Backend für Webapp: Nodejs mit Koa.js Server (Alternative zu express)
Für die Desktop Anwendung wird das Angular Kompilat in das Electron Projekt kopiert und dort direkt die
index.html
gerendert. Die Web-App gibt entsprechend die index.html
über einen Endpunkt zurück.Zum Beispiel Datenbankzugriffe werden auf Electron-Seite in dem Main Prozess ausgeführt und über IPC zwischen Angular und Electron ausgetauscht. Für die Web-App entsprechend über REST-Calls.
Das bedeutet, und damit komme ich bald zu meiner Frage, muss ich Angular-Seitig immer zwei Services bauen. Für Electron einen der, zum Beispiel Datenbankabfragen, über IPC kommuniziert, für die Web-App einen, der über REST kommuniziert. Also habe ich an diesen Stellen aktuellen immer doppelten Code.
Beispielhafter Code für Services, die Angular-Seitig den Datenbankzugriff regeln:
Angular Services:
export abstract class DBService {
abstract insert(item: any): any;
abstract update(item: any): any;
}
// Service, wenn Web-App
@Injectable()
export class DBWebappService extends DBService {
constructor(private http: HttpClient) {
super();
}
insert(item: any): any {
this.http.post('...');
}
update(item: any): any {
this.http.put('...');
}
//...
}
// Service, wenn Desktop Anwendung
@Injectable()
export class DBElectronService extends DBService {
constructor(private electron: ElectronService) {
super();
}
insert(item: any): any {
return this.electron.ipcRenderer.sendSync('db-insert', item);
}
update(item: any): any {
return this.electron.ipcRenderer.sendSync('db-update', item);
}
//...
}
Ich könnte, und das würde generell alles etwas vereinfachen, den Http-Server der Web-App auch aus der Electron Anwendung starten, hätte damit also auch einen Endpunkt, den ich aus Angular ansprechen kann. Somit bräuchte ich für alle Prozesse, die Angular-Seitig getriggert und Backend-Seitig ausgeführt werden müssen, nur noch einen anstatt zwei Services erstellen und zwar nur einen für REST.
Meine Frage jetzt ist: Findet ihr es legitim, dass eine Desktop-Anwendung einen HTTP-Server startet und sich selbst dagegen connected und wenn die Anwendung geschlossen wird diesen wieder stoppt? Ich weiß nicht, ob das ggf. Antipattern ist, aber ich glaube pgadmin von PostgreSQL macht das ähnlich.
Ich hoffe meine Beschreibung wird klar und danke euch im Voraus!
Gruß
Danny
Zuletzt bearbeitet von einem Moderator: