Considera un software che gira su un sistema dedicato (fondamentalmente una scatola Linux) e controlla alcuni macchinari. Il sistema ha tutte le interfacce hardware necessarie per l'attività. Il software ha anche una GUI per il controllo di detti macchinari.
Tuttavia, questo sistema dovrebbe in seguito essere in grado di essere utilizzato da dispositivi esterni, quindi altri software, utilizzando la stessa GUI o simili, saranno in esecuzione su vari PC, smartphone, ecc. Il SW centrale conterrà un server TCP attraverso il quale il i dispositivi esterni si connetteranno. Il dispositivo centrale con il suo software deve essere sviluppato per primo e la controllabilità da dispositivi esterni sarà un componente aggiuntivo successivo.
La mia proposta per il software "centrale" sarebbe dividerla in due programmi separati. Uno sarebbe un server senza GUI, che gestirà tutto il controllo e le interfacce hardware, e un software separato soddisferà solo i ruoli della GUI.
Naturalmente, una buona separazione MVC è possibile anche all'interno di un singolo programma, ma il vantaggio principale che vedo per la divisione del programma è che la parte della GUI sarà molto più facilmente trasferibile su altri sistemi. In realtà, nel caso di un PC come dispositivo esterno, lo stesso software può essere riutilizzato al 100%. Per altri sistemi, suppongo che sarebbe molto più facile portare un programma da 1 a 1, piuttosto che portare solo la parte GUI di un programma più complesso.
Lo svantaggio principale di questa soluzione è che il sistema iniziale sarà più complicato, poiché la GUI deve comunicare via TCP con la parte di controllo, invece che direttamente all'interno dello stesso programma.
Ci sono altri principali vantaggi e svantaggi nel dividere l'applicazione in due programmi separati che comunicano su TCP?
Lo scopo del progetto è fino a 2 anni per un piccolo team di 2-3 persone.