CQRS ve etki alanı olayları kavramlarını kullanarak bir etki alanı modeline sahip bir uygulama yapıyorum (ancak olay kaynağı yok, sadece düz eski SQL). SomethingChanged tür olaylarla ilgili hiçbir sorun yoktu. Sonra SomethingCreated olayları uygulamakta takıldım.Etki alanı olayında yeni varlık kimliği
Kimlik birincil anahtarlı bir tabloyla eşlenen bazı varlıkları oluşturduğumda, varlık kalıcı olana kadar Kimliği bilmiyorum. Varlık kalıcılıktan uzaktır, dolayısıyla bir varlığı kuruluş içinden yayınlarken, Kimliği bilinmez - yalnızca context.SaveChanges() öğesini çağırdıktan sonra büyülü olarak ayarlanır. Peki, Olay verilerini nasıl/nerede/ne zaman kullanabilirim? olay öğeye gönderim dahil
- :
ben düşünüyordum. Bu, etki alanı içinde çalışır, ancak, olaylar/iletilerle iletişim kuran çoklu özerk sisteme sahip, dağıtılmış bir ortamda çok fazla olmamalıdır.
- Yayınlama için kaydedilen olayları bir şekilde güncellemek için SaveChanges() öğesini geçersiz kılın. Ancak olayların değişmez olması gerekiyor, bu yüzden çok kirli görünüyor.
- Kimlik yapısından kurtulma ve varlık yapıcısında oluşturulan GUID'leri kullanma. Bu en kolay olabilir ancak performansa çarpabilir ve hata ayıklama veya sorgulama gibi başka şeyleri daha da zorlaştırabilir (
where id = 'B85E62C3-DC56-40C0-852A-49F759AC68FB'
,MIN
,MAX
vb.). Birçok örnek uygulamada gördüğüm bu. - Karma yaklaşım - kimliğini yalnız bırakın ve daha çok yabancı anahtarlar ve daha hızlı bağlantılar için kullanın, ancak GUID'yi, uygulamadaki depodan varlıkları aldığım benzersiz tanımlayıcı olarak kullanın.
Etkinliğin varlığına bir başvuru eklemeyin. Kaydettikten sonra kimliğin üstesinden gelmek güzel. Yayınlamada değişmez olarak düşünülmelidir. Ancak, bu, olay üretme bağlamında yeniden denemeler yapmaya izin verirseniz sorun yaratabilir.Kimliklerin dışarıdan atanmasında bir değer var, bu yüzden bunun varsayılan bir strateji olması gerektiğini düşünüyorum. Yani hem GUID'leri hem de hibrit yaklaşımı kullanarak işe yarayabilir. Başka bir yaklaşım, bazı HILO mekanizması veya kar tanesi gibi bir şey olabilir. –
HILO ve kar tanesi üzerinde ayrıntılı bilgi verir misiniz? – Pein
http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx ve http://engineering.twitter.com/2010/06/announcing-snowflake.html –