Mikro hizmetleri tasarlamak için taktiksel DDD kullanma
Etki alanı odaklı tasarım (DDD), sistemin tamamı için tek bir birleşik modele sahip olma fikrine karşıdır. Bunun yerine, sistemin her biri kendi modeline sahip sınırlanmış bağlamlara bölünmesini teşvik eder. DDD'nin stratejik aşamasında, iş etki alanını eşler ve etki alanı modelleriniz için sınırlanmış bağlamlar tanımlarsınız.
Taktiksel DDD, alan modellerinizi daha hassas bir şekilde tanımlamanızı sağlar. Taktiksel desenler tek bir sınırlanmış bağlamda uygulanır. Sınırlanmış her bağlamın bir mikro hizmet adayı olduğu mikro hizmetler mimarisinde varlık ve toplama desenleri not edilir. Bu desenlerin uygulanması, uygulamanızdaki hizmetler için doğal sınırların belirlenmesine yardımcı olur. Daha fazla bilgi için bkz. Mikro hizmet sınırlarını belirleme. Genel bir ilke olarak, mikro hizmet bir toplamadan küçük ve sınırlanmış bir bağlamdan büyük olmamalıdır.
Bu makale taktiksel desenleri gözden geçirir ve ardından bunları İnsansız Hava Aracı Ile Teslimat uygulamasındaki Sevkiyat sınırlanmış bağlamı için uygular.
Taktiksel desenlere genel bakış
Bu bölümde taktiksel DDD desenlerinin kısa bir özeti sağlanır. DDD hakkında bilginiz varsa, bunu atlamayı seçebilirsiniz. Bu desenler Eric Evans'ın kitabının 5. ve 6. bölümlerinde ve Vaughn Vernon tarafından Domain-Driven Tasarımı Uygulama bölümünde daha ayrıntılı olarak açıklanmıştır.
Varlıklar. Varlık, zaman içinde devam eden ve benzersiz bir kimliğe sahip bir nesnedir. Örneğin, bir bankacılık uygulamasında müşteriler ve hesaplar birer varlıktır.
Bir varlığın sistemde, varlığı aramak veya almak için kullanılabilecek benzersiz bir tanımlayıcısı vardır. Bu, tanımlayıcının her zaman doğrudan kullanıcılara açık olduğu anlamına gelmez. Bir GUID veya veritabanındaki birincil anahtar olabilir.
Bir kimlik birden çok sınırlanmış bağlama yayılabilir ve uygulamanın kullanım ömrü boyunca kalıcı olabilir. Örneğin, banka hesabı numaraları veya kamu tarafından verilen kimlikler belirli bir uygulamaya bağlı değildir.
Bir varlığın öznitelikleri zaman içinde değişebilir. Örneğin, bir kişinin adı veya adresi değişebilir, ancak aynı kişi olarak kalır.
Değer nesneleri. Değer nesnesinin kimliği yok. Yalnızca özniteliklerinin değerleriyle tanımlanır. Değer nesneleri sabittir. Bir değer nesnesini güncelleştirmek için eskisini değiştirmek için yeni bir örnek oluşturulur. Değer nesneleri, etki alanı mantığını kapsülleyen yöntemler içerebilir, ancak bu yöntemlerin yan etkiler üretmemesi veya nesnenin durumunu değiştirmemesi gerekir. Değer nesnelerinin yaygın örnekleri arasında renkler, tarihler ve saatler ile para birimi değerleri yer alır.
Toplamalar. Toplam değer, bir veya daha fazla varlık etrafındaki tutarlılık sınırını tanımlar. Bir toplamadaki tam olarak bir varlık kökdür. Arama, kök varlığın tanımlayıcısı kullanılarak yapılır. Toplamadaki diğer varlıklar kökün alt öğeleridir ve kökten gelen işaretçiler tarafından başvurulur.
Toplamanın amacı, işlemsel sabitleri modellemektir. Gerçek dünyadaki nesnelerin karmaşık ilişki ağları vardır. Müşterileri sipariş oluşturur, siparişler ürün barındırır, ürünlerin tedarikçileri vardır, gibi. Uygulama birbiriyle ilişkili birkaç nesneyi değiştirirse tutarlılığı nasıl garanti edebilir? Sabitleri nasıl izleyebilir ve zorlayabiliriz?
Geleneksel uygulamalar genellikle tutarlılığı zorlamak için veritabanı işlemlerini kullanır. Ancak, dağıtılmış bir uygulamada bu genellikle uygun değildir. Tek bir iş işlemi birden çok veri deposuna yayılabilir veya uzun süre çalışıyor olabilir ya da üçüncü taraf hizmetleri içerebilir. Sonuç olarak, etki alanı için gerekli sabitleri zorunlu kılmak veri katmanına değil uygulamaya bağlı olur. Toplamalar bu şekilde modellenir.
Not
Toplama, alt varlıklar olmadan tek bir varlık içerebilir. Bunu toplama yapan işlem sınırıdır.
Etki alanı ve uygulama hizmetleri. DD terminolojisinde hizmet, hiçbir durum olmadan bazı mantıkları uygulayan bir nesnedir. Evans, etki alanı mantığını kapsülleyen etki alanı hizmetleri ile kullanıcı kimlik doğrulaması veya SMS iletisi gönderme gibi teknik işlevler sağlayan uygulama hizmetlerini birbirinden ayırır. Etki alanı hizmetleri genellikle birden çok varlığa yayılan davranışları modellemek için kullanılır.
Not
Hizmet terimi yazılım geliştirmede aşırı yüklenmiştir. Burada kullanılan tanım doğrudan mikro hizmetlerle ilgili değildir.
Etki alanı olayları. Etki alanı olayları, bir şey oluştuğunda sistemin diğer bölümlerini bilgilendirebilir. Adından da anlaşılacağı gibi, etki alanı olayları etki alanı içinde anlamlı bir şeyi temsil etmelidir. Örneğin, "tabloya bir kayıt eklendi" bir etki alanı olayı değildir. "Teslim iptal edildi", bir etki alanı olayıdır. Etki alanı olayları özellikle mikro hizmetler mimarisinde önemlidir. Mikro hizmetler dağıtıldığından ve veri depolarını paylaşmadığından, etki alanı olayları hizmetler arasında koordinasyonu sağlar. Zaman uyumsuz mesajlaşma hakkında daha fazla bilgi için bkz. Hizmetler arası iletişim.
Fabrikalar, depolar ve modüller de dahil olmak üzere burada ele alınmayan birkaç DDD deseni daha vardır. Bu desenler bir mikro hizmet uyguladığınızda yararlı olabilir, ancak mikro hizmetler arasındaki sınırları tasarladığınızda daha az ilgili olur.
İnsansız hava aracı ile teslimat: Desenleri uygulama
Gönderim sınırlanmış bağlamın işlemesi gereken senaryolarla başlıyoruz.
- Bir müşteri insansız hava aracı ile teslimat hizmetine kayıtlı bir işletmeden mal almak için insansız hava aracı isteyebilir.
- Gönderen, pakete koymak için bir etiket (barkod veya RFID) oluşturur.
- İnsansız hava aracı bir paketi alıp kaynak konumdan hedef konuma teslim eder.
- Müşteri bir teslimat zamanladığında sistem rota bilgilerine, hava koşullarına ve geçmiş verilere dayalı bir ETA sağlar.
- İnsansız hava aracı uçuş sırasında, kullanıcı geçerli konumu ve en son ETA'yı izleyebilir.
- Bir insansız hava aracı paketi teslim alana kadar müşteri teslimatı iptal edebilir.
- Teslimat tamamlandığında müşteriye bildirilir.
- Gönderen, müşteriden imza veya parmak izi biçiminde teslim onayı isteyebilir.
- Kullanıcılar tamamlanmış bir teslimin geçmişini arayabilir.
Bu senaryolarda geliştirme ekibi aşağıdaki varlıkları tanımladı.
- Teslim
- Paket
- İnsansız hava aracı
- Firma
- Onay
- Bildirim
- Etiket
İlk dördü olan Delivery, Package, Drone ve Account, işlem tutarlılığı sınırlarını temsil eden toplamlardır . Onaylar ve Bildirimler Teslimatların alt varlıkları, Etiketler ise Paketlerin alt varlıklarıdır.
Bu tasarımdaki değer nesneleri Location, ETA, PackageWeight ve PackageSize değerlerini içerir.
Göstermek için, aşağıda Delivery toplamasının UML diyagramı yer alır. Hesap, Paket ve İnsansız Hava Aracı gibi diğer toplamalara başvurular içerdiğine dikkat edin.
İki etki alanı olayı vardır:
İnsansız hava aracı uçarken İnsansız Hava Aracı varlığı aracın konumunu ve durumunu (uçuşta, indi) belirten DroneStatus olayını gönderir.
Teslimat varlığı, teslimatın aşaması her değiştiğinde DeliveryTracking olaylarını gönderir. DeliveryTracking olayları DeliveryCreated, DeliveryRescheduled, DeliveryHeadedToDropoff ve DeliveryCompleted'ı içerir.
Bu olayların, etki alanı modeli için bir anlamı olan şeyleri tanımladığına dikkat edin. Olaylar, etki alanıyla ilgili bir şeyi açıklar ve belirli bir programlama dili yapısına bağlı değildir.
Geliştirme takımı, şu ana kadar anlatılan varlıkların hiçbirine tam uymayan bir işlevsellik alanı daha belirlemiştir. Sistemin bir kısmı, zamanlama veya teslimat güncelleştirme adımlarının koordinasyonunu sağlamalıdır. Bu nedenle geliştirme ekibi tasarıma iki etki alanı hizmeti ekledi: adımları koordine eden bir Zamanlayıcı ve adımların başarısız olup olmadığını veya zaman aşımına uğradıklarından emin olmak için her adımın durumunu izleyen bir Gözetmen . Bu yaklaşım , Zamanlayıcı Aracısı Gözetmen düzeninin bir varyasyonudur.
Sonraki adımlar
Sonraki adım, her mikro hizmet için sınırları tanımlamaktır.