ora sto usando dominio guidato tecniche di progettazione. Questo mi impedisce di preoccuparmi dei trigger di database ecc. E mantiene tutta la logica all'interno del codice .Net. La risposta è qui in modo che le persone possano vedere un'alternativa.
Trattiamo il genitore dell'insieme di periodi come aggregate root e la radice ha un timestamp. La radice aggregata è un limite di coerenza per transazioni, distribuzioni e concorrenza (vedere Evans - what I've learned since the blue book). Questo è usato per controllare l'ultima volta che ogni cambiamento è stato confermato al database.
Ho quindi metodi per aggiungere i periodi di noleggio al genitore. Eseguo il test sulla sovrapposizione quando aggiungo il movimento alla radice aggregata. per esempio. AddHire(start,end)
- confermerà che ciò non crea alcuna sovrapposizione sull'oggetto del dominio in memoria.
AS non esiste alcuna sovrapposizione, salvo le modifiche (tramite il mio repository) e controllo che il timestamp del database sia sempre lo stesso all'inizio del processo. Supponendo che il timestamp sia lo stesso di quando ho recuperato l'entità, le modifiche vengono mantenute e il database aggiorna il timestamp.
Se qualcun altro tenta di salvare le modifiche quando viene elaborata la radice aggregata, allora eseguirò il commit per primo o lo faranno. Se eseguo il commit prima, i timestamp non corrisponderanno e il controllo di sovrapposizione verrà eseguito di nuovo per assicurarsi che non abbiano creato una sovrapposizione nel tempo intercorrente.
l'unica soluzione orientata al database che posso pensare è la creazione di un trigger "INSTEAD OF', una procedura che esegue il controllo. ma vorrei evitarlo e controllare la sovrapposizione di codice! – vulkanino
Da un punto di vista del framework di entità non penso di poter controllare facilmente nel codice. Posso verificare a un certo punto ma c'è la possibilità che due persone aggiungano/modificino gli eventi allo stesso tempo – GraemeMiller
Ho pensato che il framework delle entità avrebbe reso l'accesso ai dati più facile, non più difficile! Dopo tutto è un semplice controllo. La concorrenza è un problema, che potresti risolvere con il blocco, se l'architettura ti permette di (web/stateless?) Sito Web – vulkanino