Etki alanı nedir?


104

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?


12
Ne yazık ki, net bir tanımı olmayan ve belirsiz bağlamlarda çok kullanılan bu kelimelerden biri olduğunu düşünüyorum. Yine de yeterince gördükten sonra, bir anlayış kazanırsınız. Demek istediğim, burada göreceğiniz tüm cevapları okuduktan sonra bile kullanımını anlamamalısınız. Zaman alacak.
aaaaaa

15
@aaaaaa tam olarak ... Humpty Dumpty şaşkınlıkla gülümsedi. ... "Bir kelimeyi kullandığımda," dedi Humpty Dumpty, oldukça huysuz bir tonda, "ne demek istediğim, ne daha fazla ne de daha az."
emory

3
Açık bir tanımı olmadığı doğru değil. Normal webster tanımına bakarsanız, bunun "baskınlığın uygulandığı bir bölge", "bazı fiziksel özelliklerle belirgin bir şekilde işaretlenmiş bir bölge" olduğunu görürsünüz. Matematikteki benzer tanım - bir fonksiyonun "domain". Büyük bir şeyi o bölgeden kimin sorumlu olduğuna veya bazı kriterlere göre alanlara veya bölgelere ayırabilirsiniz . Bir çeşit modül gibi. Yani (benim anlayış olarak) bir 'alan modeli' sen çalışabilir bir modeldir sizin uygulamanın iş mantığı. DDD'nin ayrıca "bölge" türleri ile de ilgisi var.
Sava B.

Yanıtlar:


9

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.


1
Re: son paragrafınız: belki de yazılım geliştirmenin temel alanı hakkında bir anlaşma yapmalıyız? Ancak, OOP'nin ne olduğuna ya da İşlevsel ya da herhangi bir terime karar vermek gibi, Humpty Dumpty'nin uzun zaman önce kazandığını düşünüyorum.

@ nocomprende no, bu kavramlar belirli bir zamanda belirli bir organizasyondaki belirli bir yazılıma özgüdür. Bu nedenle, MSFT Windows için ana etki alanı piyasa koşullarına, müşteri beklentilerine vb.
Bağlı

1
Sanırım bana eski sözlerimi hatırlatıyor: “2 tür insan var: insanları iki türe bölen ve olmayanlar”. Ama ... ikinci tür insanlar için yalnızca bir tür insan olurdu ... - sonsuz dolaylı hata - sistem durdu

@ nocomprende üzgünüm ilk görüşünüzü gerçekten anlamadım - yazılım geliştirmenin temel alanı üzerinde “anlaşmaya varmanın” bir şakasıydı.
RibaldEddie

109

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


4
Evet. "Etki alanı" nı okuduğunuzda muhtemelen "(belli bir uzmanlık alanıyla sınırlandırılmış) bir uzmanlık veya endişe alanı" yazabilirsiniz.
KlaymenDK

1
Akılda tutulması gereken ilginç şey, yazılımın etki alanının gerçekten insanların neyi başarmaya çalıştığıyla veya ne anlamalarıyla ilgisi olmadığıdır. Arabamdaki basit bilgisayarın hiçbir şey bilmediğim ve açıkçası umursamadığım yanmayı optimize etmek için bazı şeyler yaptığını biliyorum. Bu nedenle, yazılımın insan bakış açısı ve istekler ile ilgili olduğunu varsaymak çok tehlikeli bir yanlış anlaşılmadır. Yazılım sistemleri daha geniş alanları kapsadığı ve hedef seçimi konusunda farkındalığı ve kabiliyeti arttığı için bu kullanışlı olabilir. Hey, bekle, Asimov bunu uzun zaman önce düşünmedi mi?

1
@ user251748 - Bence, bunun insanlar hakkında ve içinde bulundukları süreçlerle ilgili olduğunu düşünüyorum . İnsanların anında ne anladıkları ile ilgili değil.
Sipo

38

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.


7
Web sitelerinin domain namesalan 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.
YetAnotherRandomKullanıcı

@YetAnotherRandomUser - Benim için ne anlama geldiği oldukça açık. ;)
Sipo

19

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: 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.


7

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. .


Tanımınızı gerçek dünyadaki faaliyetlerden bilgisayar sisteminin yaptığı işe göre hafifçe ayarlarım. Örneğin, "Bir kaynak kodu kontrol sisteminin etki alanı" dır - kaynak kod dosyalarının depolanması ve alınması . Etki alanları, gerçek dünyadaki şeyleri işlemek için değil, programlama sistemlerinin yapılandırılmasını ve sürdürülmesini kolaylaştırmak için modellenmiştir. Bu yüzden vurgu, insanların yapabileceklerini değil, bilgisayarın bunu kolaylaştırmak için neler yapabileceğini vurgulamaktadır. Dijital X-Rayleri, X-Ray işleminin hassasiyetini ve görüntü işlemesini iyileştirir, insanlar için hiçbir şey yapmazlar ve katılımsız bagaj taraması için de faydalı olurlar.

2

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 adı

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.

Alt etki

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.

Etki alanı modeli

Çı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.

Sınırlı bağlamlar

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ıradaki ne?

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 .


Yazılım için bir etki alanının yazılımın ne olduğunu söyleyebilirim . Kesinlikle önümüzde var olmadı ve tamamen bizim tarafımızdan oluşturuldu, bizim deşifre etmek istediğimiz şeyleri yapmak bizim etkileşimimiz olmadan gerçekleşmeleri için yapıldı. Başka bir deyişle, unutmak istediğimiz bir rüya hakkında. Ve yazılımın dağıtıldığı anda nasıl çalıştığını hızla unutuyoruz. Yazılım, bilgisayarları çözmek için daha uygun bir oyundur, ancak bugüne kadar yaptık, çünkü bilgisayarları henüz yapmadık, sorunu artık çözmek istemedik. Ama, çok yakında ...

Kendimi bu bölümde açıklığa kavuşturmadım - "bizden önce", benim hatam. Bu alanın insan ırkından önce var olduğunu kastetmedim. "Biz" derken, daha çok e-ticarette iş süreçlerini otomatikleştirme problemini çözen bir yazılım geliştiricisi gibiydi. Ticaret kavramı görünüşte onlardan önce vardı. Bu nedenle, geliştiricinin sorumluluğu, söylediğiniz gibi şeyleri bilgisayarlara devretmeyi mümkün kılmaktır.

Sağ. Demek istediğim, insanlar bilgisayar sistemlerinin gerçek dünyayla başa çıkmanın bir yolu olduğunu düşünüyor. Ancak bilgisayarlar, etki alanının hiç bir parçası olmayan pek çok fikir, gereksinim ve kaygı getirir. Ameliyatın duygusal problemlerle baş etmenin bir yolu olduğunu söylemek gibi. Lobotomi işe yarıyor, ama duygusal sorunların beyinle ilgisi yok. Ve hislerim hormonlar ve nörotransmiterlerden güçlü bir şekilde etkilenir, yani SSRI'lar biyoloji, psikoloji, ilişkilerin bir parçası mıdır yoksa kendi başlarına bir kategori midir? Bilgisayarlar bilgisayarlar hakkındadır, gerçek şeyler değil.

1
Bilgisayarlar gerçek şeyleri modellemekle ilgilidir. Gerçek işlerin yapılabileceği başka bir alan, gerçek iş süreçleri uygulanabilir, gerçek iş kısıtlamaları uygulanabilir. 50 yıl önce bir mağazada kasiyere 1 dolar ödedim, şimdi tüm satın alma süreci. insanla etkileşimi olmadan olabilirdi. Yine de, gerçek param gerçek banka hesabımdan çekildi. Bu nedenle, herhangi bir sürece, bilgisayara veya insana veya başka bir şeye ne olduğu önemli değildir. Muhtemelen sizin ilginizi çekebilir

Para gerçek değil. İş süreçleri gerçek değil. Konuşabileceğimiz her şey gerçek değil, bir kavramdır.
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.