Domenge baǵdarlanǵan dizayn

**Domenge baǵdarlanǵan dizayn** (ingl. *Domain-driven design;* qısq*. DDD*) ‒ bul domen ekspertleriniń kirgiziwlerine muwapıq domenge sáykes programmalıq támiynattı modellestiriwge itibar qaratıwshı úlken programmalıq támiynattıń dizayn usılı. DDD jalǵız birlesken modelge iye bolıw ideyasına qarsı; onıń ornına úlken sistemanı sheklengen kontekstlerge bóledi, olardıń hárbiriniń óz modeli bar.

Domenge baǵdarlanǵan dizayn boyınsha programmalıq kodtıń strukturası hám tili (klass atları, klass metodları, klass ózgeriwshileri) biznes domenine sáykes keliwi kerek. Mısalı: eger programmalıq támiynat kredit ótinishlerin islese, onda "kredit ótinishi", "tutınıwshılar" sıyaqlı klasslar hám "usınıstı qabıl etiw" hám "qaytarıp alıw" sıyaqlı metodlar bolıwı múmkin.

Domenge baǵdarlanǵan dizayn tómendegi maqsetlerge tiykarlanǵan:

* joybardıń tiykarǵı itibarın yadrolıq domenge hám domen logikası qabatına qaratıw;
* kompleks dizaynlardı domen modeline tiykarlaw;
* ayrıqsha domen mashqalaların sheshetuǵın konceptual modeldi iterativ túrde jetilistiriw ushın texnikalıq hám domen ekspertleri arasında dóretiwshilik birge islesiwdi baslaw.

Domenge baǵdarlanǵan dizaynnıń sınshıları, ádette, baǵdarlamashılar modeldi taza hám paydalı konstrukciya retinde saqlaw ushın úlken kólemdegi izolyaciya hám inkapsulyaciyanı ámelge asırıwı kerek dep dálilleydi. Domenge baǵdarlanǵan dizayn saqlawǵa qolaylılıq sıyaqlı paydalı táreplerdi támiyinlese de, Microsoft onı tek model domendiń ulıwma túsinigin qáliplestiriwde anıq payda beretuǵın kompleks domenler ushın ǵana usınadı.

Bul termindi 2003-jılı basılıp shıqqan usı attaǵı kitabında Erik Evans oylap tapqan.

## Sholıw
Domenge baǵdarlanǵan dizayn bir qatar joqarı dárejeli túsinikler hám ámeliyatlardı anıqlaydı.

Eń áhmiyetlisi, programmanıń domeni, paydalanıwshı programmanı qollanatuǵın temalıq aymaq bolıp tabıladı. Programma baǵdarlamashıları domen modelin quradı: domenniń tańlap alınǵan aspektlerin súwretleytuǵın hám sol domenge baylanıslı mashqalalardı sheshiw ushın qollanılatuǵın abstrakciyalar sisteması.

Domenge baǵdarlanǵan dizaynnıń bul aspektleri domen ekspertleri, paydalanıwshılar hám baǵdarlamashılar arasında ulıwma tildi - barlıq jerde qollanılatuǵın tildi rawajlandırıwǵa qaratılǵan. Barlıq jerde qollanılatuǵın til domen modelinde hám sistema talapların súwretlew ushın qollanıladı. 

Barlıq jerde qollanılatuǵın til strategiyalıq dizayn hám taktikalıq dizayn menen birge DDD-nıń tiykarǵı baǵanalarınıń biri bolıp tabıladı.

Domenge baǵdarlanǵan dizaynda domen qabatı obektke baǵdarlanǵan kóp qabatlı arxitekturadaǵı ulıwma qabatlardıń biri bolıp tabıladı.

### Modellerdiń túrleri
Domenge baǵdarlanǵan dizayn modellerdiń bir neshe túrlerin tanıydı. Mısal ushın, obekt óz atributları menen emes, al óz identifikaciyası menen anıqlanatuǵın obekt bolıp tabıladı. Mısal retinde, kópshilik aviakompaniyalar hárbir reysdegi orınlarǵa ózgeshe san beredi: bul orınnıń identifikaciyası. Soǵan qarama-qarsı, qunlı obekt - bul atributlardı qamtıǵan, biraq konceptual identifikaciyası bolmaǵan ózgermeytuǵın obekt. Adamlar biznes kartaların almastırǵanda, mısal ushın, olar hárbir ózgeshe karta arasında ayırmashılıq emes, al tek kartadaǵı informaciyaǵa (onıń atributlarına) itibar beredi.

Modeller sonday-aq waqıyalardı (ótkende bolǵan nárse) anıqlay aladı. Domen waqıyası - bul domen ekspertleri itibar beretuǵın waqıya. Modeller tamır obekt arqalı birlestirilip, agregatqa aylanıwı múmkin. Agregattan tıs obektler tamırǵa siltemelerdi saqlawǵa ruqsat etiledi, biraq agregattıń basqa hesh bir obektına emes. Agregat tamırı agregattaǵı ózgerislerdiń turaqlılıǵın tekseredі. Mısal ushın, drayverler mashinanıń hárbir dóńgelegin jeke-jeke basqarıwı shárt emes: olar tek ǵana mashinanı basqaradı. Bul kontekstte mashina basqa bir neshe obektlerdiń (dvigatel, tormozlar, faralar t.b.) agregatı bolıp tabıladı.

### Modeller menen islew
Domenge baǵdarlanǵan dizaynda obekttiń jaratılıwı kóbinese obekttiń ózinen ajıratıladı.

Mısal ushın, repozitoriy - bul maǵlıwmat saqlaǵıshınan (mısalı, maǵlıwmatlar bazası) domen obektlerin alıw ushın metodları bar obekt. Sol sıyaqlı, fabrika - bul domen obektlerin tikkeley jaratıw ushın metodları bar obekt.

Programmanıń funkcionallılıǵınıń bir bólegi konceptual túrde hesh bir obektke tiyisli bolmaǵanda, ol ádette servis retinde súwretlenedi.

## Waqıya túrleri
DDD-da hár qıylı waqıya túrleri bar hám olardı klassifikaciyalaw boyınsha pikirler hár qıylı bolıwı múmkin. Yan Kuyge muwapıq, waqıyalardıń eki tiykarǵı kategoriyası bar: 

### Domen Waqıyaları
Domen waqıyaları belgili bir biznes domenindegi áhmiyetli waqıyalardı bildiredi. Bul waqıyalar sheklengen kontekst penen sheklenedi hám biznes logikasın saqlaw ushın áhmiyetli. Ádette, domen waqıyaları jeńil paydalı júklerge iye boladı, tek islew ushın zárúr bolǵan informaciyanı qamtıydı. Sebebi, waqıya tıńlawshıları ádette bir xızmet ishinde boladı, onda olardıń talapları anıǵıraq túsiniledi.

### Integraciya Waqıyaları
Ekinshi jaǵınan, integraciya waqıyaları hár qıylı sheklengen kontekstler arasında ózgerislerdi xabarlaw ushın xızmet etedi. Olar pútkil sistema boyınsha maǵlıwmat turaqlılıǵın támiyinlew ushın áhmiyetli. Integraciya waqıyaları potencial tıńlawshılardıń talapları áhmiyetli dárejede ayırmashılıǵı múmkin bolǵanlıqtan, qosımsha atributları bar kompleks paydalı júklerge iye bolıwǵa umtıladı. Bul kóbinese xabarlasıwǵa tolıǵıraq jaqınlasıwǵa alıp keledi, nátiyjede barlıq tiyisli informaciyanıń nátiyjeli túrde bólisiliwin támiyinlew ushın artıqsha xabarlasıw payda boladı.

## Kontekst kartası úlgileri
Kontekst kartası úlkenirek sistema ishindegi hár túrli domenler yamasa subdomenlerdiń shegarasın anıqlaydı hám belgileydi. Ol bul kontekstlerdiń óz ara tásirin hám qatnasın kóriwge járdem beredi. Tómende Erik Evansqa muwapıq ayırım úlgiler berilgen:

* "Sheriklik"
* "Ulıwma yadro"
* "Tutınıwshı/támiynlewshi rawajlaniwi"
* "Konformist"
* "Korrupciyaǵa qarsı qabat"
* "Ashıq xost servisi"
* "Járiyalanǵan til"
* "Ayırım jollar"
* "Ílaydıń úlken tobı"

## Basqa ideyalar menen baylanısı
Domenge baǵdarlanǵan dizayn ózinen-ózi obektke baǵdarlanǵan jaqınlasıwlar menen baylanıspasa da, ámelde ol bunday texnikalardıń artıqmashılıqların paydalanadı. Bular komandalardı/metod shaqırıwların qabıl etiwshi tiykarlar/agregat tamırları, eń aldınǵı agregat tamırları ishindegi jaǵdaydı inkapsulyaciyalaw hám joqarı arxitekturalıq dárejede sheklengen kontekstlerdi qamtıydı.

Nátiyjede, domenge baǵdarlanǵan dizayn kóbinese Java hám .NET Framework-ke tiyisli texnikalıq orınlaw detalları Plain Old Java Objects hám Plain Old CLR Objects penen baylanıstırıladı. Bul terminler domen obektleri ayrıqsha texnologiyalıq freymvork arqalı emes, al tek domenniń biznes minez-qulqı arqalı anıqlanıwı kerek degen ósip baratırǵan kózqarastı kórsetedi.

Sol sıyaqlı, jalańash obektler úlgisi paydalanıwshı interfeysi tek ǵana jetkilikli dárejede jaqsı domen modeliniń kórinisi bola aladı dep esaplaydı. Paydalanıwshı interfeysiniń domen modeliniń tikkeley kórinisi bolıwın talap etiw jaqsıraq domen modeliniń dizaynın májbúrleydi.

Domenge baǵdarlanǵan dizayn programmalıq támiynatı rawajlanıwınıń basqa jaqınlasıwlarına tásir etti.

Mısalı, domenge tiyisli modellestiriw - bul domenge tiyisli tiller menen qollanılatuǵın domenge baǵdarlanǵan dizayn. Domenge baǵdarlanǵan dizayn domenge tiyisli tildi qollanıwdı anıq talap etpeydi, biraq ol domenge tiyisli tildi anıqlawǵa hám domenge tiyisli kóp modellestiriwge járdem beriw ushın qollanılıwı múmkin.

Óz gezeginde, aspektke baǵdarlanǵan programmalastırıw texnikalıq máselelerdi (qawipsizlik, tranzakciyanı basqarıw, loglastırıw sıyaqlı) domen modelinen ajıratıwdı ańsat etedi, olarǵa tek biznes logikasına itibar qaratıwǵa ruqsat beredi.

### Modelge baǵdarlanǵan injeneriya hám arxitektura
Domenge baǵdarlanǵan dizayn modelge baǵdarlanǵan injeneriya hám modelge baǵdarlanǵan arxitektura menen sáykes kelse de, eki túsinikten keyingi niyet ayırmashılıǵı bar. Modelge baǵdarlanǵan arxitektura jaqsıraq domen modellerin anıqlawdan góre, modeldi hár qıylı texnologiyalıq platformalar ushın kodqa awdarıwǵa kóbirek itibar qaratadı.

Degen menen, modelge baǵdarlanǵan injeneriya támiyinlegen texnikalar (domenlerdi modellestiriw, domen ekspertleri hám baǵdarlamashılar arasındaǵı xabarlasıwdı ańsatlastırıw ushın domenge tiyisli tillerdi jaratıw,...) ámelde domenge baǵdarlanǵan dizayndı ańsatlastıradı hám ámeliyatshılarǵa óz modellerinen kóbirek payda alıwǵa járdem beredi. Modelge baǵdarlanǵan injeneriyanıń model transformaciyası hám kod generaciyası texnikaları arqalı domen modeli onı basqaratuǵın haqıyqıy programmalıq támiynat sistemasın jaratıw ushın qollanılıwı múmkin.

### Komanda Soraw Juwapkershiligin Ajıratıw
Komanda Soraw Juwapkershiligin Ajıratıw (CQRS) - bul maǵlıwmattı oqıwdı ("soraw") maǵlıwmatqa jazıwdan ("komanda") ajıratıw ushın arxitekturalıq úlgi. CQRS Bertran Meyer tárepinen oylap tabılǵan Komanda hám Sorawdı Ajıratıwdan (CQS) kelip shıǵadı.

Komandalar jaǵdaydı ózgertedi hám agregat tamırları yaki tiykardaǵı metod shaqırıwına shama menen teń. Sorawlar jaǵdaydı oqıydı, biraq onı ózgertpeydi.

CQRS domenge baǵdarlanǵan dizayndı talap etpese de, ol agregat tamırı túsinigi menen komandalar hám sorawlar arasındaǵı ayırmashılıqtı anıq kórsetedi. Ideya - bul belgili bir agregat tamırınıń komandaǵa sáykes keletuǵın metodı bar hám komanda qayta islewshisi agregat tamırındaǵı metodtı shaqıradı.

Agregat tamırı operaciya logikasın orınlawǵa juwapker hám yaki nátiyjesiz juwap beredi yaki maǵlıwmat saqlaǵıshına jazılıwı múmkin bolǵan óz jaǵdayın ózgertedi. Komanda qayta islewshisi agregat tamırınıń jaǵdayın saqlawǵa hám zárúr kontekstlerdi (mısalı, tranzakciyalar) jaratıwǵa baylanıslı infrastruktura máselelerin tartadı.

### Waqıya hújimi
Waqıya hújimi - bul domen waqıyaların anıqlaw hám túsiniw ushın Domenge Baǵdarlanǵan Dizayn (DDD) kontekstinde aldın ala qollanılıwı múmkin bolǵan birge islesiw, seminarǵa tiykarlanǵan modellew texnikası. Bul interaktiv tabıw processine mápli tárepler, domen ekspertleri hám baǵdarlamashılar domen waqıyalarınıń aǵımın, olardıń sebeplerin hám olardıń aqıbetlerin kóz aldına keltiriw ushın birge islesedi, domenniń ulıwma túsinigin rawajlandıradı. Texnika kóbinese hár qıylı elementlerdi, mısalı, domen waqıyaları, agregatlar hám sırtqı sistemalar sıyaqlılardı kórsetiw ushın reńli jabısqaq qaǵazlardı qollanadı, domenniń anıq hám strukturalanǵan izertleniwin ańsatlastıradı. Waqıya hújimi DDD-daǵı tiykarǵı konstrukciyalar bolǵan subdomenlerdi, sheklengen kontekstlerdi hám agregat shegaraların tabıwǵa járdem bere aladı. Domende "ne boladı" degenge itibar qaratıw arqalı texnika biznes processlerin, baylanıslardı hám óz-ara tásirlerdi anıqlawǵa járdem bere aladı, DDD principlerin ámelge asırıw hám sistema dizaynın biznes maqsetleri menen sáykeslendiriw ushın tiykar jaratadı. 

### Waqıya derekleri
Waqıya derekleri - bul mazmunlar tikkeley seriyalastırıw yaki obekt-relyaciyalıq kartaǵa túsiriw arqalı emes, al waqıya saqlaǵıshına waqıyalardı oqıw hám tapsırıw arqalı óz ishki jaǵdayın qadaǵalaytuǵın arxitekturalıq úlgi.

Waqıya derekleri CQRS hám domenge baǵdarlanǵan dizayn menen birlestirilgende, agregat tamırları komandalardı tastıyıqlaw hám qollanıwǵa juwapker (kóbinese olardıń ekzemplyar metodları Komanda Qayta islewshisinen shaqırıladı) hám sońınan waqıyalardı járiyalaydı. Bul sonday-aq agregat tamırları metod shaqırıwları menen islesiw ushın óz logikasın tiykarlaytuǵın tiykar bolıp tabıladı. Demek, kirgiziw - bul komanda, al shıǵarıw - bul waqıya saqlaǵıshına saqlanatuǵın bir yaki kóp waqıyalar, sońınan qızıqqanlar ushın (mısal ushın, qosımshanıń kórinisi) kóbinese xabar brokerіnde járiyalanadı.

Agregat tamırların waqıyalardı shıǵarıw ushın modellew standart n-qabatlı maǵlıwmat ótkeretuǵın arxitekturalardaǵı sıyaqlı mazmunlardan oqıw maǵlıwmatın proekciyalaǵannan góre ishki jaǵdaydı jáne de izolyaciyalay aladı. Bir áhmiyetli paydası - aksiomatikalıq teorema dálillewshilerin (mısalı, Microsoft Contracts hám CHESS) qollanıw ańsatıraq, sebebi agregat tamırı óz ishki jaǵdayın tolıǵı menen jasıradı. Waqıyalar kóbinese agregat tamırı ekzemplyarınıń versiyasına tiykarlanıp saqlanadı, bul optimistlik parallellik arqalı bólistirilgen sistemalarda sinxronlanatuǵın domen modelin beredi.

## Sheklengen kontekstlerdi mikroservislerge salıstırıw
Sheklengen kontekst, Domenge Baǵdarlanǵan Dizayndaǵı (DDD) tiykarǵı túsinik, domen modeli turaqlı hám jaramlı bolǵan belgili bir aymaqtı anıqlaydı, anıqlıqtı hám máselelerdiń ajıratılıwın támiyinleydi. Mikroservisler arxitekturasında sheklengen kontekst kóbinese mikroserviske salıstırıladı, biraq bul baylanıs dizayn jaqınlasıwına baylanıslı ózgeriwi múmkin. Hárbir sheklengen kontekst bir mikroservis retinde ámelge asırılatuǵın jalǵız baylanıs, ádette, anıq shegaralardı saqlap qalatuǵın, baylanıstı azaytatuǵın hám óz aldına jaylastırıw hám masshtablastırıwǵa múmkinshilik beretuǵınlıqtan ideal bolıp tabıladı. Degen menen, basqa kartaǵa túsiriwler de jaramlı bolıwı múmkin: sheklengen kontekst hár qıylı masshtablastırıw yaki basqa operaciyalıq talaplardı sheshiw ushın bir neshe mikroserviske bólingende birden-kóp baylanıs payda bolıwı múmkin, al kópten-birge baylanıs ápiwayılıq ushın yaki operaciyalıq qárejetlerdi azaytıw ushın bir neshe sheklengen kontekstlerdi bir mikroserviske biriktiriwi múmkin. Baylanıstı tańlaw sistemanıń biznes maqsetleri, texnikalıq sheklewleri hám operaciyalıq talapları menen DDD principlerin teńlestiriwi kerek.

## Ataqlı qurallar
Domenge baǵdarlanǵan dizayn hár qanday ayrıqsha quralǵa yaki freymvorkke baylanıslı bolmasa da, ataqlı mısallarǵa tómendegiler kiredi:

* Actifsource, Eclipse ushın plagin, ol DDD-nı modelge baǵdarlanǵan injeneriya hám kod generaciyası menen birlestiriwshi programmalıq támiynattı rawajlandırıwǵa múmkinshilik beredi.
* Context Mapper, strategiyalıq hám taktikalıq DDD ushın domenge tiyisli til hám qurallar.
* CubicWeb, maǵlıwmat modeli arqalı tolıǵı menen basqarılatuǵın ashıq kodlı semantikalıq veb freymvork. Joqarı dárejeli direktivalar maǵlıwmat modelin iterativ túrde jetilistiriwge, relizden keyin reliz shıǵarıwǵa múmkinshilik beredi. Maǵlıwmat modelin anıqlaw jumıs isleytuǵın veb qosımshanı alıw ushın jetkilikli. Ádettegi kórinisler jetkilikli bolmaǵanda maǵlıwmattıń qalay kórsetiletuǵının anıqlaw ushın qosımsha jumıs talap etiledi.
* OpenMDX, Java SE, Java EE hám .NET-ti qollap-quwatlawshı ashıq kodlı, Java-ǵa tiykarlanǵan MDA Freymvorkı. OpenMDX ádettegi MDA freymvorklarınan "operaciyalıq sistemalardıń orınlaw minez-qulqın tikkeley basqarıw ushın modellerdi qollanıwı" menen ayırmashılıǵı bar.
* Restful Objects, domen obekt modeline (domen obektleri mazmunlardı, kórinis modellerin yaki servislerdi kórsetiwi múmkin) Restful API-di kartaǵa túsiriw standartı. Eki ashıq kodlı freymvork (biri Java ushın, biri .NET ushın) refleksiya járdeminde domen modelinen avtomat túrde Restful Objects API-di jarata aladı.

## Derekler

__BÖLİDİMÖNDEMEW__