Ho un oggetto complesso (chiamalo BusinessLogic) che fornisce un'interfaccia RPC ad utenti semi-fidati. Le funzioni nell'interfaccia RPC devono decidere quale procedura chiamare, controllare l'autorizzazione per quella funzione, eseguire il controllo degli argomenti, quindi chiamare le funzioni private per eseguire la funzionalità richiesta e quindi restituire i risultati al chiamante.
Ho deciso di implementarlo avendo le funzioni RPC in un oggetto stateless separato (chiamiamolo AppInterface), per separare un po 'le preoccupazioni, in modo che BusinessLogic sposti semplicemente i propri dati e AppInterface decida quali metodi su BusinessLogic chiamare implementare la funzionalità che espone.
Questo funziona molto bene per la maggior parte. Tuttavia mi sembra un po 'sbagliato. L'oggetto BusinessLogic ha beneficiato del fatto di non doversi preoccupare dell'autorizzazione, del controllo degli argomenti, ecc., Che è buono. Ma dal momento che AppInterface implementa tutte le sue funzionalità in termini di BusinessLogic, può essere solo un involucro sottile per alcune procedure (che mi fa dubitare della sua necessità) ed è un involucro complesso in altre procedure (il che mi fa chiedere se tale complessità debba essere reinserito in BusinessLogic, dato che BusinessLogic dispone di tutte le informazioni necessarie per eseguire l'attività). Significa anche che AppInterface ha bisogno di accedere ai metodi in BusinessLogic che altrimenti sarebbero privati poiché nient'altro li usa; pensa alle funzioni amico in C ++. Infine, significa che non riesco a testare in modo efficace l'AppInterface senza utilizzare un oggetto BusinessLogic completo poiché questo è l'unico modo pratico per ottenere un output valido.
Sono felice di lasciare il sistema così com'è, mentre funziona, ma sono curioso di sapere se ci sono miglioramenti evidenti che posso apportare a un sistema del genere.
(Per quel che vale, sto usando Python 2.7, in uno stile principalmente orientato agli oggetti.)