Karmaşık bir iş alanı ve bir REST API (kesinlikle REST değil, kaynak odaklı) desteklemek için bir gereksinimi olan bir uygulama tasarlamaya çalışıyorum. Etki alanı modelini kaynak odaklı bir şekilde ortaya çıkarmanın bir yolunu bulmakta zorlanıyorum.
DDD'de, bir etki alanı modelinin müşterilerinin Varlıklar ve Etki Alanı Hizmetleri tarafından uygulanan herhangi bir işlevsellike erişmek için yordamsal 'Uygulama Hizmetleri' katmanından geçmesi gerekir. Örneğin, bir Kullanıcı varlığını güncellemek için iki yöntem içeren bir uygulama hizmeti vardır:
userService.ChangeName(name);
userService.ChangeEmail(email);
Bu Uygulama Hizmetinin API'si, durumu değil komutları (fiiller, prosedürler) gösterir.
Ancak aynı uygulama için RESTful API sağlamamız gerekirse, şöyle görünen bir Kullanıcı kaynak modeli vardır:
{
name:"name",
email:"email@mail.com"
}
Kaynak yönelimli API komutları değil durumu gösterir . Bu, aşağıdaki endişeleri ortaya çıkarır:
bir REST API'sine karşı her güncelleme işlemi, kaynak modelde hangi özelliklerin güncellenmekte olduğuna bağlı olarak bir veya daha fazla Uygulama Hizmeti prosedür çağrısıyla eşleşebilir
her güncelleme işlemi REST API istemcisine atom gibi görünür, ancak böyle uygulanmaz. Her Uygulama Hizmeti çağrısı ayrı bir işlem olarak tasarlanmıştır. Bir kaynak modeldeki bir alanı güncellemek, diğer alanlar için doğrulama kurallarını değiştirebilir. Bu nedenle, tüm olası Uygulama Hizmeti çağrılarının yapılmaya başlamadan önce geçerli olduğundan emin olmak için tüm kaynak modeli alanlarını birlikte doğrulamamız gerekir. Bir komut kümesini bir kerede doğrulamak, bir kerede bir komut yapmaktan daha az önemsizdir. Tek tek komutların var olduğunu bile bilmeyen bir istemcide bunu nasıl yapabiliriz?
Uygulama Hizmeti yöntemlerini farklı sırayla çağırmak farklı bir etkiye sahip olabilirken, REST API bunu bir fark yokmuş gibi gösterir (tek bir kaynakta)
Daha benzer konularla karşılaşabilirim, ama temelde hepsine aynı şey neden oluyor. Bir Uygulama Hizmetine her çağrıdan sonra, sistemin durumu değişir. Geçerli değişikliğin kuralları, bir işletmenin bir sonraki değişikliği yapabileceği eylemler kümesi. Kaynak odaklı bir API, hepsini atomik bir işlem gibi göstermeye çalışır. Ancak bu boşluğu geçmenin karmaşıklığı bir yere gitmeli ve çok büyük görünüyor.
Ek olarak, kullanıcı arayüzü daha fazla komut odaklıysa, genellikle durum budur, o zaman istemci tarafında komutlar ve kaynaklar arasında ve ardından API tarafında geri gitmemiz gerekir.
Sorular:
- Tüm bu karmaşıklık sadece (kalın) REST-AppService eşleme katmanıyla mı ele alınmalı?
- Yoksa DDD / REST anlayışımda bir şey mi eksik?
- REST, etki alanı modellerinin işlevselliğini belirli (oldukça düşük) bir karmaşıklık derecesi üzerinde göstermek için pratik olmayabilir mi?