Attualmente sto costruendo una libreria di modelli di oggetti da utilizzare in un progetto. Comprende i nostri concetti interni - Server, cartelle, elementi - in una gerarchia di oggetti (IFolder, IItem, ecc.) E abbiamo diverse implementazioni di questi oggetti astratti, utilizzando un database o un server di Exchange come back-end, in modo che un IFolder
oggetto nelle nostre mappe di codice (ad esempio) in una cartella pubblica fisica su Exchange.
Ora mi sono chiesto come questi oggetti wrapper / proxy dovrebbero reagire quando il loro storage sottostante viene modificato. L'usecase principale è quando una cartella viene cancellata, tramite la mia API o direttamente nel livello di archiviazione. Naturalmente, l'oggetto è ora orfano e non dovrebbe essere usato, ma potrei ancora avere delle istanze nel sistema. Come dovrebbe comportarsi ora?
- Al momento la maggior parte delle sue proprietà sono memorizzate nella cache dell'oggetto stesso per evitare chiamate ripetute al livello di archiviazione. Dovrebbero questi accessors della proprietà eseguire il ping dell'oggetto sottostante per assicurarsi che sia ancora attivo?
- Devo esaminare un meccanismo di polling per aggiornare le proprietà o anche vedere se il mio livello fisico ha fornito eventi OnChanged?
- Se il mio oggetto wrapper scopre che la sua memoria unerlying è stata cancellata (ad esempio a causa dell'accesso a una proprietà uncached ha restituito un errore), dovrebbe ora contrassegnarsi come Deleted (in modo che tutti gli accessi a proprietà e metodi restituiscano una sorta di ObjectDeletedException) o dovrebbe solo cancellare tutte le cache e consentire a future chiamate di fallire naturalmente.
In breve, sto cercando buoni consigli e best practice per lo sviluppo di un layer wrapper di object model. Vedrò altre implementazioni simili (modello a oggetti Sharepoint, servizi Web Managed Exchange), ma qualsiasi linea guida solida sarebbe apprezzata.