Strati software e mappatura dei dati

1

Prima di porre la mia domanda, ecco il contesto: sto lavorando su una parte di un software relativamente grande. Nella sua forma più semplice ci sono 3 livelli del software che consentono di chiamarli livello inferiore, livello intermedio e livello superiore. Sto lavorando sullo strato intermedio. Il lavoro del livello intermedio è molto semplice, recupera le informazioni dal livello inferiore e le consegna al livello superiore. Può anche ricevere varie richieste dal livello superiore ed eseguire azioni sul livello inferiore e fornire il feedback al livello superiore.

Il livello inferiore è un componente di terze parti, quindi abbiamo concordato un modello di dati che sarebbe comune tra livello intermedio e livello superiore. Questi due livelli comunicano tramite un protocollo di comunicazione inter process proprietario. Il modello di dati viene fornito come parte del framework contenente le librerie per il protocollo di comunicazione proprietario (di conseguenza, le intestazioni contenenti i modelli utilizzano lo spazio dei nomi del framework e non il livello intermedio).

Il mio approccio: il modo in cui ho implementato era utilizzare direttamente il modello di dati in tutto il livello intermedio, sebbene usasse lo spazio dei nomi del protocollo di comunicazione, poiché lo considero il modello di dati del livello intermedio. Quindi, vorrei leggere direttamente i dati dal livello inferiore nel modello dati, inviarlo attraverso vari sottostrati all'interno del livello intermedio e al livello superiore sul protocollo di comunicazione.

Uno dei miei colleghi ha criticato il mio approccio, sostenendo che è il modello di dati del livello comm e cosa succederebbe se lo strato comm si modificasse domani o fosse sostituito con un altro, dovrò sostituire ogni singola istanza in cui l'ho usato attraverso fuori dallo strato intermedio. Quindi, ha suggerito di utilizzare un modello di dati interno che verrebbe utilizzato per leggere dal livello inferiore e inviare questo modello al punto in cui invio i dati sul livello comm allo strato superiore. Prima di inviare i dati dovrei eseguire la mappatura dei dati sul tipo di dati del livello comm.

Non credo che abbia ragione, dato che è il modello di dati del mezzo e l'ho definito io stesso. Solo perché deve essere inviato sul livello comm, viene fornito con il framework e quindi ha uno spazio dei nomi del framework. Ma questo non lo rende il tipo di dati di livello comm. Inoltre, se il livello comm e quindi lo spazio dei nomi cambiano, non sarebbe un grosso problema, poiché posso risolvere questo problema con una semplice definizione.

Quindi, la domanda dopo una lunga storia: ha davvero senso eseguire mappature con il livello stesso? Come giudichi la situazione?

    
posta user2219907 08.07.2018 - 22:43
fonte

1 risposta

1

Dove il tuo collega ha ragione: dovresti essere preparato per il potenziale requisito di dover supportare una diversa comunicazione tecnologia . Ciò non significa che la sua soluzione proposta sia quella giusta, né che si debba investire molto per sostenere altre tecnologie "nel caso in cui".

Quello di cui dovresti occuparti è che il modello di dati all'interno del tuo livello di comunicazione dovrebbe idealmente essere agnostico della tecnologia di comunicazione stessa. Pensa a cosa succede quando devi cambiare la tecnologia. Riuscirai a riutilizzare la maggior parte del modello di dati senza dover sostituire ogni singola istanza in cui lo hai usato ? Magari creando un "comm layer V2", con strutture dati compatibili (o almeno quasi compatibili)

Se è possibile farlo, non è assolutamente necessario aggiungere un altro livello di riferimento indiretto sotto forma di un ulteriore "modello di dati interno". Altrimenti, potrebbe valere la pena di pensarci.

    
risposta data 09.07.2018 - 15:15
fonte

Leggi altre domande sui tag