DDD'ye atıfta bulunmak, sınırlı bir bağlam nedir?


40

Vaughn Vernon'un "Etki Alanını Etkileyen Tasarım Uygulaması" kitabını incelerken, sınırlı bir içeriğin gerçekte ne olduğunu iyi anlayamadım.

Kitap, sınırlanmış bir bağlamı "bir etki alanı modelinin uygulanabilir olduğu kavramsal bir sınırdır. Ekip tarafından konuşulan ve dikkatle tasarlanmış yazılım modelinde ifade edilen Her Dilde Hazırlık Dilini sağlar" ("Bu Kitabın Kılavuzu" ön yüzündeki bölüm) olarak tanımlanmaktadır. Bu tanım, sınırlanmış bir bağlamın, bir alt alanın modeli ve dili olduğu gibi ses çıkarır; bu alt alanın, çekirdek alan (örneğin, "çekirdek alt alan" olarak adlandırılması gerektiği gibi görünebilir) başka bir tartışma ...). Bu, sınırlı bir içeriğin ne sağladığına dair hala bir belirsizlik bırakıyor. Bir veya daha fazla alt alan adından oluşan bir grup mu? Yalnızca bir alt etki alanı sınırlı bir içeriğe karşılık gelirse, sınırlı içerik gerçekte bize ne söyler?

Bununla birlikte, aynı kitabın 3. Bölümü, sınırlı bağlamlar arasındaki entegrasyon tekniklerini ifade eder. Bununla birlikte, bunun sınırlı bağlamların aslında bir çeşit çeşit yazılım sistemi veya eseri olduğu anlaşılmaktadır.

Martin Fowler, sınırlı bir bağlam ( http://martinfowler.com/bliki/BoundedContext.html ) fikrini kısaca tartışıyor , ancak konuyu gerçekten netleştirmiyor.

Günün sonunda ne olduğunu sınırlı bir bağlamda? Bir grup alt alan mı var? Bir alt etki alanı için model ve dil? Bir alt etki alanı uygulaması? Bu cevaplar olmadan, gerçek hayattaki bir problemin sınırlı bağlamlara nasıl ayrılacağını anlamak oldukça zor görünmektedir.



2
Bu gönderi tanımı tanımı netleştirmiyor, en azından benim için. Sınırlandırılmış bağlamlar fikrini örgütsel olarak uygulayabilecekleri gibi tartışır, ancak bunu asla yazılım geliştirmeye geri götürmez.
Michael,

1
TAMAM. DDD uzmanı olmasam da, bu açıklamayı Microsoft'tan yararlı buldum (Giriş paragrafında): msdn.microsoft.com/en-us/library/jj591572.aspx . Diyor ki: ...
Robert Harvey

1
Sınırlı bağlamlar, kendi etki alanı modelleri ve kendi yaygın dilleri ile özerk bileşenlerdir. Çalışma zamanında birbirlerine bağımlılık göstermemeli ve izolasyon içinde çalışabilmelidir. Ancak bunlar aynı sistemin bir parçası ve birbirleriyle veri alışverişinde bulunmaları gerekiyor ...
Robert Harvey

1
... Eğer CQRS modelini sınırlı bir bağlamda uyguluyorsanız, bu tür bir iletişim için olayları kullanmalısınız: sınırlanmış bağlamınız, sınırlanmış bağlamın dışında ortaya çıkan olaylara yanıt verebilir ve sınırlanmış bağlamınız, başkalarının yayınladığı olayları yayınlayabilir. sınırlı içeriklere abone olabilirsiniz. Olaylar, sınırlanmış bağlamlarınız arasındaki gevşek bağlantıyı korumanızı sağlar.
Robert Harvey,

Yanıtlar:


38

Sınırlı Bağlamlar ve Alt Alanlar farklı seviyelerde bulunur.

Bir Alt etki alanı, sorunlu alanın bir bölümüdür ; sistemin doğal bir bölümlemesidir ve genellikle kuruluşun yapısını yansıtır. Bu yüzden lojistik ve operasyonlar faturalandırma ve faturalandırmadan ayrılabilir . Eric , çekirdek , destekleyici ve genel alt alanları, verilen senaryodaki iş ilgilerine göre farklılaştırır .

Bağlamlar , çözüm alanının bölümleridir. Onlar manken . Onlara sahip olmak, etki alanlarını ve alt bölümlerini bölümlere ayırmak iyi bir şey olurdu ... ama hayat her zaman bu kadar kolay değil. Ve aynı alt alandaki (yani eski uygulamanın yerine geçen uygulamanın birinin oluşturduğu) her şeyi ya da daha fazla bağlamı içeren eski alan adını şişirmiş olabilirsiniz.

Bir sahip olmak Sınırlı Bağlam Bir modeli olması gerekir ve çevresinde açık bir sınır. Veri paylaşımı için veritabanlarını kullanan birçok veri odaklı uygulamada tam olarak eksik.

Başka bir - ortogonal - görmenin yolu aşağıdaki olabilir. Ubiquitous Language , her terimin tek bir net tanımına sahip olduğu özel koşul, ölçeklenmez. Ne kadar genişlerseniz, belirsizlik de o kadar fazla belirsizleşir. Kesin ve net olmayan modeller elde etmek istiyorsanız, sınırlarını belirginleştirmeniz ve her biri tek bir Sınırlanmış Bağlam içinde, her biri iyi tanımlanmış bir amaç için birçok Ubiquitous Dilini konuşmanız gerekir. .


1
Yani, ideal bir dünyada, alt alanlar ve sınırlı bağlamlar arasında bire bir ilişki olur mu? (Açıkçası, ideal olanın ve gerçek olanın farklı olduğunu anlamak).
Michael

2
Mutlaka gerekli değil: Önemli olan, birçok alt alanın üst üste binen bir BC'nin kötü bir koku olmasıdır. Şey ... sınırlı değil. DDD terimlerinde bir model amaçlarına tam olarak uymalıdır ve farklı alt alanlar farklı amaçlara sahiptir (ve muhtemelen farklı hedeflere sahip farklı patronlar bile). Ancak aynı alt etki alanında, farklı nedenlerle farklı BC'ler olabilir. Web ve mobil uygulama, durum veya planlama veya uygulama için farklı modeller olabilir .
ZioBrando

Ancak en önemli şey iki sorunlu ailenin olduğunu anlamaktır: 1) mevcut bağlamı okumak (sadece mevcut modelleri ve işbirliklerini kabul edip kategorilere ayırabileceğiniz yerler ), 2) mevcut kısıtlamaları göz önüne alarak doğru yazılımı tasarlamak, böylece bağlam sınırlarını koymak Küçük, amaç odaklı modeller arasında. İkinci senaryoda, alt etki alanı sınırlarını bilerek örtüşmeyeceksiniz. ... genel olarak, kusursuz olmayan bir organizasyonda mükemmel yazılım aramak zor şeyler olabilir. Ancak bu tutarsızlıkları çözmek çabaya değer olabilir.
ZioBrando

8

Domain Driven Design teknikleri, içinde yaşadığımız dünyanın modellerini yapmamıza yardımcı olmak için kullanılır. Bu modeller, bir projede yer alan kişilerin kafasında fikir olarak bulunur.

Telepati halen başlangıç ​​aşamasında olduğundan, bu fikirler kelimeleri ve cümleleri kullanan insanlar arasında iletilir.

Kelimeler ve ifadeler çoğu zaman belirsiz olabilir. Belirsizliği azaltmamıza yardımcı olmak için, anlamlarını netleştirmek için 'bağlam'ı kullanırız.

İnsanlar yıllarca süren bir yazılım projesine derinlemesine daldıklarında, koda dönüştürülen değişken isimlerine dönüşen kelimelere dönüşen fikirlerin ortaya çıktığı bağlamı unutmuş görünüyorlar.

Yeni başlayanlar projeye gelir ve dilini kullanmaya ve tüketmeye başlar. Belki de kullanıcı, belki de geliştirici. Eğer kendilerine sağlanan bir içerik yoksa, kendi yaşam deneyimlerinden kendi bağlamlarını (ve dolayısıyla anlamlarını) ortaya çıkarırlar.

Yeni uygulanmış olan bu bağlam, yeni geliştiricilerin kodu nasıl reddettiği veya geliştirdiği konusunda rehberlik edecektir. Eğer yanlış bağlamı uyguladılarsa, kodu yanlış yönlendirecekler ve geliştirecekler, belki de her zaman biraz yanlış yönde. Yanlış yönler, ancak hafif olmasına rağmen, çizgide çok daha büyük sorunlara neden olabilir.

Gördüğüm gibi, 'sınırlı bir bağlam' sadece yenileri yansıtmak için kullanılan açık bir bağlamdır, bu nedenle kendi keyfi bağlamımızı, güzelce bilenmiş modelimizi geliştirmek için kullanmazlar.

Bu tam bir onaydır, ekip tarafından, tam olarak (ve düşündüğünüz gibi değil this phrase) this part of the projectanlamına gelir .this thingthat thing

Tıpkı bahçeniz ile komşunuzun bahçesi arasındaki sınırları işaretlemeniz iyi bir fikirdir. Sınırları açıkça belirtirsiniz, böylece mükemmel manikürlü çimlerinizde bir çiçek yatağını kazmaya başladığınızda kızmazsınız.

Bu kadar. Bu konuda çok şey yazılması çok önemli olan çok basit bir fikir.

Yani evet. Sınırlandırılmış bir bağlam, kelimenin tam anlamıyla bir sınırdır, bir alt alanın bağlamını bir projedeki başka bir alt alanın bağlamından ayıran bir “çit” dir.

Bir alt alanın modeli ve dili, anlamdaki belirsizlikleri önlemek için diğer model ve dillerden izole edilmiştir.

Ama evet. Dünya o kadar basit değil.

Siz ve takım, tanımlanan içeriğe bağlı kalırken titiz olmalısınız. Tembel olmak ve yazılım yapımı sırasında köşeleri kesmek için bağlamı yeniden hayal etmek gerçekten kolaydır.

Ayrıca, işler başka şeylerle etkileşime girer ve sınırlı bağlamların da birbirleriyle etkileşime girmeleri gerekir. Dolayısıyla, bu etkileşimlerin nasıl gerçekleştiğini açıklayan çeşitli desenler vardır. Bu çeşitli modeller için Eric Evan'ın Domain Domain Driven Design Chapter 14'e bakınız: Paylaşılan Çekirdek, Müşteri Tedarikçisi, Konformist, Yolsuzlukla Mücadele Katmanı, Ayrı Yollar, Açık Sunucu Servisi, Yayınlanan Dil.


1
Bu yüzden, temel olarak bir alt etki alanı etrafındaki bir çit.
Robert Harvey,

1
Evet. Görebildiğim kadarıyla. Bu bir çit.
JW01

0

Temel olarak, Sınırlı bağlam, bazı alt alanların uygulanabilirliğinin bazı somut sınırlarını tanımlar. Belli bir alt alanın mantıklı olduğu soyut alandır, diğerleri ise anlamsızdır. Yani bu bir konuşma, bir sunum, artefakt tarafından tanımlanan fiziksel sınırlara sahip bir kod projesi olabilir.

Farklı durumlarda Sınırlı Bağlam kavramının üç farklı perspektifini veya metaforunu kullanıyorum.

Çalışma zamanı açısından, modelin uygulandığı bir hizmet sözleşmesiyle tanımlanan mantıksal sınırları temsil eder. Sözleşme, bu hizmetin API'si veya yayınladığı ve tükettiği bir dizi etkinlik olarak temsil edilebilir. Yani bu açıdan Sınırlı bağlamın fiziksel sınırlarla hiçbir ilgisi yoktur.

Bir etki alanı uzmanının bakış açısından, sınırlı bağlam, belirli iş süreçlerinin uygulandığı, belirli her yerde kullanılan dilin uygulandığı ve diğerlerinin yapmadığı durumlarda belirli terimlerin açık bir şekilde anlaşıldığı bir alandır. Bu yüzden, bir kağıt veya beyaz tahta üzerine çizilmiş bir dikdörtgen.

Bir yazılım geliştirici için, yani statik kod perspektifinden, sınırlı bir bağlam, modellerimi ilgili alt alanların etrafında tasarladığım bir yolu temsil eder. Belirli bir alt etki alanında kaç tane kod tabanı uygulanmaktadır? Hangi kavramlardan oluşur? Her birinde hangi kavramlar uygulanabilir? Bu nedenle sınırlı bağlamların bir Çözüm alanına ait olduğu söylenir.

Sınırlı Bağlam kavramının bu örneğini gerçekten beğendim .

Bir diğer önemli soru (en önemlisi değilse), sınırlı bağlamların nasıl tanımlanacağıdır . Bunu yanlış yaparsanız , dağınık monolith olarak da bilinen konuşkan, sürdürülemez ve sıkı bir şekilde birleştirilmiş servislerle karşılaşırsınız .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.