Metodologia progettuale per lo sviluppo di sistemi interoperabili?

2

Un po 'di background

La società per cui lavoro ha creato applicazioni di database dal 1980 circa e, fino a tempi relativamente recenti, la maggior parte di questi sistemi sono stati sistemi "silo" autonomi.

Tuttavia, negli ultimi anni abbiamo assistito a uno spostamento verso la raccolta di "intelligence" su tutti i sistemi all'interno delle esigenze dei nostri clienti. Ad esempio, un sistema che potrebbe raccogliere dati sulle cartelle dentali delle persone potrebbe dover parlare con un sistema che raccoglie dati sui record di persone, condividere informazioni sulla stessa persona e fornire funzionalità di ricerca su entrambi i sistemi (ha senso, anche se l'esempio I ' ve usato è immaginario).

Nell'esempio immaginario di cui sopra, i sistemi dentistico e ottico possono o meno essere entrambi scritti dalla società per cui lavoro (in altre parole, stiamo esaminando interfacce e interfacce internamente sviluppate con sistemi di fornitori di terze parti) .

Cosa abbiamo fatto fino ad ora

Abbiamo un'API di servizi web di base ( .asmx ) per uno dei nostri prodotti, ma sono preoccupato per la gestione delle modifiche, in termini di aggiornamento su come aggiungere nuove funzionalità al prodotto principale (in termini di fornitura delle nuove funzionalità tramite l'API senza compromettere la compatibilità con le interfacce precedenti).

Abbiamo anche prodotto un servizio WCF . I contratti rigidi mi mettono un po 'più a mio agio che lavorare con il servizio ASMX, ma penso che la mancanza di esperienza all'interno dell'azienda ci trattiene, quindi sto cercando delle indicazioni sulle migliori pratiche su cui posso leggere aiutaci a muoverci (o almeno a indicarci la direzione giusta).

La domanda

  • Esiste una particolare metodologia o pratica di programmazione per progettare sistemi per massimizzare la loro capacità di interfacciarsi con altri sistemi?

  • Esistono buone risorse online (o offline) per queste pratiche di programmazione (supponendo che esistano)?

Qualsiasi altro consiglio che puoi fornire in base alle informazioni di cui sopra sarebbe apprezzato, ma non essenziale.

Sviluppiamo principalmente in Microsoft .NET (principalmente ASP.NET, con alcune applicazioni Windows Form) con un back-end di database SQL Server / Oracle, anche se mi aspetto che le pratiche di programmazione possano essere indipendenti dalla lingua. (Ho usato il tag .NET come ripensamento, ma potrei eliminarlo più tardi ..!)

Grazie per il tuo tempo.

    
posta oliver-clare 08.12.2011 - 10:26
fonte

5 risposte

3

Puoi seguire il metodo di Jeff Bezos come descritto qui link

Il suo grande mandato è andato su questa linea:

1) Tutti i team esporranno i loro dati e funzionalità attraverso le interfacce di servizio.

2) I team devono comunicare tra loro attraverso queste interfacce.

3) Non ci sarà altra forma di comunicazione tra processi consentita: nessun collegamento diretto, nessuna lettura diretta dell'archivio dati di un'altra squadra, nessun modello di memoria condivisa, nessuna back-door. L'unica comunicazione consentita è tramite chiamate all'interfaccia di servizio attraverso la rete.

4) Non importa quale tecnologia usano. HTTP, Corba, Pubsub, protocolli personalizzati - non importa. A Bezos non interessa.

5) Tutte le interfacce di servizio, senza eccezioni, devono essere progettate da zero per essere esternalizzate. Vale a dire, il team deve pianificare e progettare per poter esporre l'interfaccia agli sviluppatori nel mondo esterno. Nessuna eccezione.

6) Chiunque non lo faccia verrà licenziato.

7) Grazie; buona giornata!

    
risposta data 10.12.2011 - 14:18
fonte
1

Suggerirei di progettare una suite di programmi di esempio che interagiscono con il tuo sistema. Usa le piattaforme che più probabilmente saranno utilizzate per interagire con te, ad esempio una suite .NET, una suite Java, una suite PHP ... considerando quali versioni potrebbero essere in uso (ad esempio se fornisci una suite Java 5+ ... sei sicuro che non ci siano persone bloccate in 1.4 nella tua zona?).

Gestisci queste suite, usale come suite di test (puoi utilizzarle per verificare la presenza di modifiche), forniscile liberamente a chiunque voglia interagire con il tuo sistema.

Se mi dai un vaso con classi che incapsulano la comunicazione con il tuo sistema e esempi di utilizzo, sarò felice. Inoltre, se qualcuno ha un problema, avrai meno problemi come "eh, stiamo usando XFire per il sapone, non l'asse ...".

E soprattutto, comunica!

    
risposta data 09.12.2011 - 11:05
fonte
1

we've seen more of a shift towards gathering "intelligence" across all systems within our customers requirements.

Hai chiaramente bisogno di un sistema di BI \ Data Warehouse (Business Intelligence). La costruzione di uno implica fondamentalmente la creazione di un nuovo archivio dati centrale, in cui tutti i sistemi spingono (o hanno tirato) i dati su tali sistemi su base regolare. Questi dati sono tutti sposati insieme in qualche modo, quindi ottimizzati per il recupero dei dati e l'amp; velocità di reporting.

Poiché sei un negozio .Net, ti consiglierò di dare un'occhiata a SSAS & SSRS (servizi di analisi SQL Server e servizi di reporting di SQL Server.)

Link obbligatorio: link

Is there a particular methodology or programming practice for designing systems to maximise

their ability to interface to other systems?

Non c'è davvero alcuna correlazione tra metodologia e design. Non ho mai sentito parlare di una particolare metodologia che pretende di funzionare meglio per particolari schemi di programmazione, design o tecnologie.

    
risposta data 12.12.2011 - 00:48
fonte
1

La mia esperienza con questo è molto piccola, ma credo che potresti esaminare SOA ( architettura orientata ai servizi ) . Il suo obiettivo è esattamente quello che vuoi: componenti software interoperabili.

Non confondere i servizi SOA con i servizi .NET tipici (asmx, wcf). La comunicazione tra 2 servizi SOA può passare attraverso asmx o wcf, ma può anche usare Messaging (MSMQ, ...) per esempio.

    
risposta data 12.12.2011 - 14:02
fonte
0

Suggerirei di usare qualcosa di gratuito come Buffer del protocollo . È disponibile per tutte le principali lingue, viene fornito con i generatori ed è ragionevolmente veloce. Ed è dimostrato sul campo.

Da quello che sembra, la forza di WCF sta nella sua capacità di consumare una grande varietà di formati. Tuttavia, in una prospettiva a lungo termine, il tuo interesse dovrebbe essere quello di dare forma ai fornitori per l'interoperabilità, non i tuoi consumatori.

    
risposta data 12.12.2011 - 14:53
fonte

Leggi altre domande sui tag