Tecnica per sincronizzare i codici di errore in un'API dello stesso progetto

2

Nel progetto sto lavorando proprio ora, abbiamo alcuni python e qualche codice C #. Ad un certo punto, chiamo da Python un sottoprocesso che avvia un eseguibile C #. Questo codice C # restituisce un codice di errore, che deve essere compreso sul lato python e deve essere creato un report leggibile.

Questo significa che entrambe le parti "devono parlare la stessa lingua". Quindi, alla fine devo gestire una mappatura {codici di errore: spiegazione leggibile} (normalmente la implementiamo come proprietà statiche di una classe di enumerazione). Questo è ovviamente un caso di duplicazione del codice e incline a essere incoerente.

Le mie idee per mitigare questo sono state finora:

  • Genera automaticamente il codice: diciamo quando il mapping sulla parte C # cambia, il codice verrà analizzato e generato automaticamente sul lato python. Anche se penso che questo sia tecnicamente corretto, devo in qualche modo analizzare il codice C # e tradurlo in codice python valido, che è probabilmente qualcosa di difficile da ottenere correttamente la prima volta.

  • Elaborazione parziale del codice di errore sul lato python. Questo significa, basta controllare zero o non zero valore di ritorno, e se diverso da zero, leggere lo stdout del processo C # e segnalarlo, non importa quale. Sebbene sia molto facile da implementare, vedo alcuni possibili avvertimenti, come il processo C # che si interrompe in modo imprevisto e segnala alcuni traceback di eccezione o simili.

Poiché questo deve essere un problema abbastanza comune, vorrei sapere quali sono gli approcci più semplici e più manutenibili utilizzati nel settore.

    
posta bgusach 23.02.2015 - 10:15
fonte

2 risposte

1

Piuttosto che analizzare il codice C #, il mio suggerimento sarebbe quello di memorizzare i codici di errore e le descrizioni associate in file di risorse esterne (XML, JSON, CSV, tabella di database, qualunque cosa). In questo modo tutto ciò che il codice Python deve fare è cercare il codice e recuperare la descrizione leggibile dall'uomo. Ciò consentirà inoltre di aggiungere il supporto per la localizzazione / traduzione o di aggiornare i testi senza ridistribuire il codice.

    
risposta data 23.02.2015 - 10:30
fonte
1

Vorrei usare la generazione del codice da una sola fonte.

es. definire i codici di errore in un file di testo e utilizzare T4 per generare enum di C # e qualcosa di simile per generare codice Python. Oppure scrivi direttamente enum C # e usa la generazione del codice per generare solo python. Non devi necessariamente analizzare il codice C #, puoi usare uno strumento .net che carica dinamicamente il tuo .net assembly e usa la reflection per ottenere membri di enum. Perché non usare T4 per generare enumerazione python? :)

Credo che la generazione di codice sia il modo migliore per evitare la violazione del principio di DRY in questo caso.

    
risposta data 25.03.2015 - 10:46
fonte

Leggi altre domande sui tag