Bu terimi yazılım mimarisi bağlamında çok görüyorum ("etki alanı modeli", "etki alanı odaklı tasarım" vb.). Googledim, ama tonlarca farklı tanım alıyorum. Peki gerçekte nedir?
Bu terimi yazılım mimarisi bağlamında çok görüyorum ("etki alanı modeli", "etki alanı odaklı tasarım" vb.). Googledim, ama tonlarca farklı tanım alıyorum. Peki gerçekte nedir?
Yanıtlar:
Eric Evans'ın Domain Driven Design kitabındaki “domain” kelimesinin özel bir anlamı vardır. Yazılımın konusu bu.
Evans yine de daha ileri gidiyor. Ona göre aynı yazılımla bile alt alanlar var. Ve bu, “Stratejik Tasarım” ile ilgilenen kitabın bir parçası.
Üç "etki alanı" vardır: çekirdek etki alanı, destekleyici etki alanı ve genel etki alanı. Bazen bunlara alt alan adı olarak başvurabilir.
Evans ayrıca yazılımın arkasındaki asıl işle ilgileniyor ve kitap yalnızca geliştiricileri hedeflemiyor, aynı zamanda yazılım ve işletmenin birlikte nasıl çalışabileceğini görmesi gereken mimarlar ve yöneticiler ve stratejik tasarım tartışırken bununla ilgileniyor. ve bu alt alanlar.
Dolayısıyla, ana alan, yazılımın hem rekabet avantajını hem de yazılımın “yükselişini” temsil eden kısmıdır. Yazılımın bir parçası olmasının nedeni bir müşterinin yazılımı başka bir yazılımdan satın almasıdır. Genellikle, Evans bunu en küçük kod yüzdesini içeren alan olarak görür. En önemli% 20 olarak düşünebilirsiniz. Raftan gerçekten satın alamayacağınız kısımdır ve genel yazılımın yalnızca tek bir modülü veya bileşeni olabilir.
Destekleyici etki alanı hala önemlidir ve kuruluş için benzersiz olabilir, ancak temel etki alanı kadar önemli değildir. Onsuz, yazılım o kadar değerli olmayacak ve çekirdek ona güvenecek. Yazılımda, kendinizin yazmış olduğu ve çekirdeğe önemli ancak destekleyici işlevler yapan birçok modül olabilir.
Genel etki alanı, en az özel ve bir anlamda yazılımın en az önemli kısmıdır. Evde yazmış olabilirsiniz, ancak raftan satın almak veya iyi bilinen açık kaynaklı yazılımı kullanmak daha verimli olabilir. Sistemin bu bölümü muhtemelen genel etki alanınıza özel değildir, bu nedenle, örneğin, paketleri yönlendiren bir gönderi sistemine veya hastaları yöneten bir sağlık kayıt sistemine sahip olup olmadığınızdan, genel etki alanı, bu sistemlerin yaygın olan ve yalnızca işlevini görmek için orada olman gerekiyor. Bu muhtemelen sistemin toplamını oluşturur, ancak öyle olması gerekmez.
Bir işletme açısından, ana etki alanınızın ne olduğuna karar vermek ve geliştirme kaynaklarınızı oraya odaklamak önemlidir. Evans, özellikle InfoQ sitesinde, bu kavramları daha ayrıntılı olarak açıkladığı birçok videoya sahiptir.
Bu nedenle, yazılımdaki “etki alanı” hakkında sık sık konuşurken, DDD söz konusu olduğunda, göründüğü kadar basit değildir.
DDD kavramlarının mutlaka daha geniş bir yazılım topluluğunda bulunmadığını not etmeliyim. Diğer geliştiriciler, yazarlar ve ürün insanları, biraz daha ince ve biraz daha az farklı fikir ve tanımlara sahip olabilir. DDD hakkında yazan diğer yazarlar bile Evans'ın kitabında bu kavramlara dikkat çekebilir, ancak bir yazılım projesi yazarken ve planlarken kavramların hala yararlı olduğunu düşünüyorum.
Etki alanı , yazılımı kullanarak bir sorunu çözmeye çalıştığınız gerçek dünya bağlamıdır. Her alan, o alanın bir parçası olan uzmanlık, kelime bilgisi ve araçlarla birlikte gelir.
Bir alanın spesifik bir örneği "yüksek hızlı dönen bir kesici kullanarak karmaşık parçaların otomatik olarak işlenmesi" gibi bir şey olabilir. Bunu gerçekleştiren yazılım ve donanım sistemine CNC değirmeni adı verilir .
Bir başka etki alanı örneği, bir şirketteki muhasebe departmanıdır.
Martin Fowler Tarafından Okumaya Bağlı Okuma
Bu, sadece çalıştığınız sorun alanı anlamına gelir. Örneğin, bir e-ticaret web sitesi oluşturuyorsanız, etki alanınız "e-ticaret" olur ve müşterinizin / şirketinizin satış uygulamalarıyla ilişkili işlemleri içerir. Dolayısıyla, bir etki alanı modeli, bir ürünü veya faturayı veya nakliye kaydını temsil edecek bir şey olabilir.
domain names
alan adı olarak da bilindiği için, alan kelimesini burada nasıl kullandığınızı açıklığa kavuşturmanız gerektiğini düşünüyorum.
Bir Alan bilginin bir alandır. Yazılımınız tarafından çözülen sorunların var olduğu bir faaliyet olarak görülebilir. ( Wiki , DDD Topluluğu )
Kitabındaki Eric Evans, DDD'nin ne olduğunu açıklamak için kargo taşımacılığını kullanıyor. Örneğinde, alan nakliye ile ilgili her şeydir . Kargonun nasıl taşındığı, yönetildiği, sevk edildiği ve takip edildiği vb. Kendi özel kuralları, dili ve süreçleri ile birlikte gelir. Bunlar etki alanı modelleri, nesneler, hizmetler vb. Yaratacaktır.
Bir uygulama oluşturduğunuzda, herkesin depolara erişemeyeceği gibi, gerçek nakliye dünyası gibi, bir tür yetkiye sahip olursunuz. Kullanıcıların nasıl yetkilendirildiği ve izinlerin nasıl verileceği alanın dışında olabilir , çünkü bilgiler kargo taşımacılığı ile ilgili olmayabilir.
Basitçe söylemek gerekirse: iş yaptığınız bir alan adıdır . İşletmeniz kargo kargo ise - kargo kargo sizin etki alanınız olacaktır. İşletmeniz personelin kimliğini doğrulamak ve yetkilendirmek durumundaysa, bu sizin alanınız olacaktır.
Gönderen Domain-Driven Design: Yazılım Kalbinde Karmaşıklığının Mücadele Eric Evans:
Her yazılım programı, bir kullanıcının etkinliği veya ilgisiyle ilgilidir. Kullanıcının programı uyguladığı konu alanı yazılımın etki alanıdır .
Bir havayolu rezervasyon programının alanı, gerçek insanları gerçek uçaklara bindirmeyi içerir.
Bir muhasebe programının alanı para ve finanstır.
Bir kaynak kod kontrol sisteminin alanı, yazılım geliştirmenin kendisidir.
Etki alanı modeli, daha sonra bir etki alanı uzmanının kafasındaki bilginin "titizlikle organize edilmiş ve seçici bir soyutlamasıdır".
Palermo, soğan mimarisini tanımlarken, bu özeti sundu
En merkezde, kurum için gerçeği modelleyen devlet ve davranış kombinasyonunu temsil eden Etki Alanı Modeli'ni görüyoruz.
Fowler, sırayla, teklifler
Hem davranışı hem de verileri içeren etki alanının nesne modeli.
Daha yeni tanımlara bakıyorsanız, etki alanı modeli ve veri modelinin farklı olduğu referanslarına rastlama olasılığınız daha yüksektir . Vurgu değişikliği kadar anlamlı bir anlam değişiminin - davranışları modellemenin (verinin model dışından gelen bilgilere cevaben değişme şekli) farklı şeyler yazma biçiminden daha karmaşık ve değişken olduğunu düşünmüyorum. .
Muhtemelen zaten etki alanı hakkında bir fikriniz olduğundan, atmanız gereken bir sonraki adım, alt etki alanı, etki alanı modeli ve daha da önemlisi sınırlı bağlam tanımlamaya çalışmaktır.
Yine de etki alanı perspektifimi koymakla başlıyorum.
Alan, içinde yaşadığımız gerçekliktir: varlıkları, davranışları, uydukları yasalar. Bu, bizden önce vardı ve bizden sonra, bir şekilde ya da başka bir şekilde var olacak. Varlığı farkındalığımıza bağlı değil. Pazarlamacılar yeni özellikler geliştirdiler ve pazar analizi yaptılar, Anahtar hesap yöneticileri müşterilerle iletişim kuruyor, yazılım geliştiriciler iş süreçlerini otomatikleştiriyor. Bu yüzden alan adı Problem alanı olarak adlandırılıyor.
DDD, modellemelerini ve kavramalarını kolaylaştırmak için alt alanlara ayrışan alan anlamına gelir. Bir işletmeyi yönettiğiniz gerçeği, en az bir baskın işletme değeri olduğunu gösterir. Para kazandığın kişi. İşimizi başladığımız için. Öyleyse “Çekirdek etki alanı” gibi bir kelime bilmeseniz bile, hala var. Aynısı alt alanlar için de geçerlidir: Muhtemelen defter tutma, insan kaynakları ve teknik desteğe ihtiyacınız olacak - ancak ikincil.
Çıkarılan alt alan adlarının tamamını modellemeye gerek yoktur. İlgilendiğimiz her bir alt alanda belirli bir kurallar kümesi vardır. Belirli bir işletme sonucunu elde etmek için gerekli olan bazı alt alanlarda ayarlanmış bir kurala model denir.
En önemli şey sınırlı bağlamın mantıksal bir sınır olmasıdır.
Hem alt etki alanları hem de çekirdek etki alanı tanımlandığında, kodu uygulama zamanı gelmiştir. Sınırlı bağlam, bazı alt alanların uygulanabilirlik somut sınırlarını tanımlar. Belli bir alt alanın mantıklı olduğu, diğerleri ise anlamsız bir alandır. Bu bir konuşma, sunum, eser tarafından tanımlanan fiziksel sınırlara sahip bir kod projesi olabilir.
Sınırlı bağlam kavramının alt alan kavramıyla nasıl ilişkilendirildiği, alt alan adlarının ve sınırlı bağlamların nasıl tanımlandığı, birbirleriyle olan iletişimlerinin nasıl temsil edileceği ve bu kavramlarla ekiplerin nasıl organize edileceği ile ilgileniyorsanız, muhtemelen bu konuyla ilgileneceksiniz. daha fazla okuma .