Düzenle

Aracılığıyla paylaş


Mikro hizmetleri tasarlamak için taktiksel DDD kullanma

Azure Migrate

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 birinin kendi modeli olan sınırlanmış bağlamlara bölünmesini teşvik eder. DDD’nin stratejik aşamasında işletme 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, özellikle varlık ve toplama desenleriyle ilgileniyoruz. Bu desenleri uygulamak, uygulamamızdaki hizmetler için doğal sınırları belirlememize yardımcı olur (bu serinin sonraki makalesine bakın). Genel bir ilke olarak mikro hizmetin toplamadan daha küçük ve sınırlanmış içerikten daha büyük olmaması gerekir. İlk olarak taktiksel düzenleri gözden geçireceğiz. Ardından bunları İnsansız Hava Aracı Ile Teslimat uygulamasındaki Sevkiyat sınırlanmış bağlamı için uygulayacağız.

Taktiksel desenlere genel bakış

Bu bölüm taktiksel DDD desenlerinin kısa bir özetini sağlar, dolayısıyla DDD'yi zaten biliyorsanız, büyük olasılıkla bu bölümü atlayabilirsiniz. Desenler, Eric Evans'ın kitabının 5 - 6. bölümlerinde ve Vaughn Vernon'un Etki Alanı Odaklı Tasarımı Uygulama bölümünde daha ayrıntılı olarak açıklanmıştır.

Etki alanı odaklı tasarımdaki taktik desenlerin diyagramı

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 ömrü boyunca dayanabilir. Örneğin, banka hesabı numaraları veya devlet tarafından verilen kimlikler belirli bir uygulamanın ömrüne 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 yine de aynı kişidir.
  • Bir varlık, diğer varlıklara başvuruları tutabilir.

Değer nesneleri. Değer nesnesinin kimliği yok. Yalnızca özniteliklerinin değerleriyle tanımlanır. Değer nesneleri de sabittir. Bir değer nesnesini güncelleştirmek için her zaman eskisini değiştirmek için yeni bir örnek oluşturursunuz. Değer nesnelerinin etki alanı mantığını kapsülleyen yöntemleri olabilir, ancak bu yöntemlerin nesnenin durumunda yan etkileri olmamalıdır. Değer nesnelerinin tipik örnekleri arasında renkler, tarih ve saatler ve para birimi değerleri bulunur.

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. Buradaki tanım doğrudan mikro hizmetlerle ilgili değildir.

Etki alanı olayları. Etki alanı olayları, bir şey gerçekleştiğinde sistemin diğer bölümlerine bildirim göndermek için kullanılabilir. Adından da anlaşılacağı gibi, etki alanı olayları etki alanı içindeki bir şeyi ifade etmelidir. Örneğin “bir tabloya kayıt eklenmesi” bir etki alanı olayı değildir. "Teslim iptal edildi" bir etki alanı olayıdır. Etki alanı olayları özellikle mikro hizmetler mimarisinde kullanılır. Mikro hizmetler dağıtıldığından ve veri depolarını paylaşmadığından, etki alanı olayları bunların birbirleriyle koordine olması için bir yol sunar. Hizmetler arası iletişim makalesinde zaman uyumsuz mesajlaşma daha ayrıntılı olarak ele alınmaktadır.

Fabrikalar, depolar ve modüller de dahil olmak üzere burada listelenmeyen birkaç DDD deseni daha vardır. Bunlar, mikro hizmet uygularken yararlı desenler olabilir, ancak mikro hizmet arasındaki sınırları tasarlarken 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.

Teslim toplamının UML diyagramı

İ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. Bunlar DeliveryCreated, DeliveryRescheduled, DeliveryHeadedToDropoff ve DeliveryCompleted’tır.

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, Zamanlayıcı Aracısı Gözetmen düzeninin bir varyasyonudur.

Düzeltilen etki alanı modelinin diyagramı

Sonraki adımlar

Sonraki adım, her mikro hizmet için sınırları tanımlamaktır.