Classi per l'integrazione di BitBucket e GitHub nel nostro sito (una questione di ereditarietà e composizione)

0

Sto scrivendo un sistema di callback per BitBucket e GitHub che dovrebbe modificare il nostro sito su determinati eventi in BitBucket o GitHub.

È ragionevole creare una classe base come GitIntegration per gestire sia BitBucket ( BitBucket class) che GitHub ( GitHub class) come suoi ereditari. Nota che queste tre classi sono agnostiche del nostro sito. La loro unica responsabilità è comunicare con BitBucket e GitHub, non fare nulla con il nostro sito.

Ma c'è ancora un'altra classe nel gioco (chiamiamola OurSiteGitIntegration ) che farà la modifica effettiva dei nostri siti, quando riceve messaggi da BitBucket o GitHub.

Dobbiamo in qualche modo collegare OurSiteGitIntegration con un codice particolare per BitBucket e GitHub.

L'idea migliore che ho trovato è la seguente:

Crea OurSiteGitIntegration una classe astratta e crea due mixin:

  1. OurSiteBitBucket (derivato da OurSiteGitIntegration , BitBucket )
  2. OurSiteGitHub (derivato da OurSiteGitIntegration , GitHub )

C'è un modo ancora più conciso e diretto? (senza i mixins)

Io uso Python Django.

    
posta porton 09.11.2016 - 21:27
fonte

1 risposta

1

Spero di aver capito correttamente la tua domanda.

Manterò il OurSiteGitIntegration lontano dall'interazione con BitBucket class e GitHub class.

Esegui ognuno di essi in un thread / processo separato e scrivi eventi in una coda che deve essere consumata da OurSiteGitIntegration

Immagino (correggimi se sbaglio) eseguirai il polling su Github e Bitbucket per gli eventi, e una volta che hai cercato qualcosa, applicherai delle modifiche al tuo sito (potrebbe essere utile se tu puoi specificare che tipo di modifica intendi fare sul tuo sito)

Quindi di nuovo utilizzando una coda interna (o esterna, se si desidera ridimensionare) per accodare gli eventi di interesse da Github e Bitbucket e consumare quegli eventi con OurSiteGitIntegration
ti permetterà di eseguire tutto in modo asincrono, e di generalizzarlo abbastanza per consentire una facile integrazione di nuove fonti.

Cerca sempre di pensare a quali cambiamenti saranno necessari se avrai bisogno di aggiungere un'altra fonte (come Gitlab), quanto sarà facile integrarla nel tuo progetto.

la maggior parte del codice della piastra della caldaia può essere sottratta con celery

spero che abbia aiutato

    
risposta data 12.11.2016 - 02:53
fonte

Leggi altre domande sui tag