O zaman neyi özlüyorum?
Bir tahminde bulunmak.
Eksik olabileceğiniz ilk şey, olayları yalnızca yeniden oluşturduğunuz durum için yeniden yüklemeniz gerektiğidir. İşlem sınırlarınızı temiz bir şekilde modelleyebiliyorsanız, her nesne kendi kimliğiyle etiketlenmiş olayları yazabilir ve yalnızca bu olaylarda tekrar okuyabilir. Olay depolama için ilişkisel bir veritabanı kullanıldığında, bu sorguyu hızlandırmak için dizinlenmiş bir kimlik sütunu olacaktır. EventStore kullanıldığında, her nesnenin kendi akışı olur.
Her işlemde yalnızca tek bir nesneyi değiştirdiğinizden emin olmak istediğiniz için, modelinizde bunu temiz bir şekilde yapmak biraz özen gösterir ve bu nedenle yapmaya çalıştığınız her bir değişkeni doğru bir şekilde izole ettiğinize dikkat etmeniz gerekir. zorlamak.
Bunun yeterince hızlı olmadığı durumlarda, durumunuzun anlık görüntülerini oluşturma (not alma) ve buna "geleneksel depolama" da devam etme olanağınız vardır. Her anlık görüntü, anlık görüntüyü oluşturmak için kullanılan son olayın sıra numarası ile etiketlenir; yeniden yükleme sırasında, depo ilk önce anlık görüntüyü yakalar, daha sonra ona daha yeni olaylar uygular. (Bu, daha yeni anlık görüntüleri almak için makul bir yol anlamına gelir - olaylar da sıra numarasıyla etiketlenir veya başlangıç noktanıza ulaşıncaya kadar olay akışını geriye doğru okumak için etkili bir yolunuz vardır.)
Buradaki olağan yaklaşımdan hala bir avantaj var, anlık görüntülerinizin onlarla birleştirilmektense yazılarınıza paralel olarak oluşturulabilmesidir: sadece bir olay dinleyicisini başka bir iş parçacığına / sürece koyarsınız ve yazarken neşeyle izin verirsiniz herhangi bir programda makul görünüyor. Sonuçta, anlık görüntünün özellikle zamanında olması gerekmez - sadece yeni olayları yeniden uygulama çalışmasının SLA'nızı etkilememesi yeterlidir.
(Anlık görüntü çekimi taşımayı zorlaştırır; modelin seri hale getirilmesinde yapılan herhangi bir değişiklik anlık görüntü önbelleğini geçersiz kılacaktır. Elbette, yeni seri oluşturmayı taşıma işleminin bir parçası olarak kullanarak anlık görüntüleri yeniden oluşturabilir ve ardından değişiklikler yayınlandığında "yakalayabilirsiniz".)
Durumu olay akışından geri yükleme yaygın olarak yapılmakta mıdır?
Evet öyle. CQRS örneklerinde normal olarak gösterilen, Uygulama katmanının, gönderilen komutun iyi bir şekilde oluşturulduğundan emin olduktan sonra, uygulama katmanının etki alanı nesnesini bir depodan yükleyeceği ve burada yükün varsayılan bir kurucu olduğu ve ardından olay akışının bir tekrarlanacağı (veya eşdeğer olarak, olayların listesini içeren bir fabrikaya yapılan çağrı).
Diğer iki çelişkili düşünce.
- Havuz arayüzünün arkasında bir önbellek olabilir
- Önbellek geçersiz kılma iki zor sorundan biridir.