Di seguito è riportato il disegno, che è implementato in modo simile al design utilizzato in Linux/net/socket.c
.
Il design sottostante fornisce List
astrazione,
dove,list.h
forniscel'interfacciaList
,mostra
Background:
Reason to implement
List
abstraction in this approach is to consider as a prototype inspired fromLinux/net/socket.c
design, where any one of the multiple protocol family implementations(likenet/ipv4/af_inet.c
ornet/unix/af_unix.c
/..) is available on invokingsocket(AF_INET | AF_UNIX | AF_XYZ,,)
api.This prototype would help understand implementing snmp library that talks to multiple network elements(Router/Switch/Server) using snmp protocol.
Il design sopra (mostrato nell'immagine sopra) è un'analogia con Linux/net/socket.c
come mostrato in questo codice qui con una leggera differenza nel tempo di collegamento (fase linker) a differenza delle implementazioni di collegamento in Linux/net/socket.c
avviene in fase di caricamento sostituendo _init()
codice di esecuzione in esecuzione (ad esempio af_inet.c
) e invoca sock_register()
Per migliorare ulteriormente questa analogia,
Sto pensando di migliorare il design (mostrato nell'immagine sopra), che può consentire a createList(ARRAY_IMPL)
di essere chiamato da fileIO/fileReading.c
(per il proprio scopo) e createList(LINKED_LIST_IMPL)
ottenere chiamato da ST/implUsingList.c
(per il proprio scopo).
Con il design attuale (mostrato nell'immagine sopra), si rompe lo scopo, in quanto funziona con qualsiasi implementazione (ad esempio arrayImpl.c
) collegata alla fase del linker.
Motivo: ListHandler *handler = NULL;
è la variabile globale definita in virtualImplLayer.c
e viene sovrascritta su ogni chiamata a createList(ImplType)
, come mostrato in questo codice here
La mia domanda:
Come migliorare questo design prototipo per scegliere più implementazioni per lo scenario del cliente (mostrato nell'immagine)? Richiede il multi-threading al livello di implementazione virtuale ??