Anemik domen modeli
Anemik domen modeli (ingl. anemik domen modeli) - programmalastırıwdıń anti-patterni (anti úlgisi) sıpatında súwretlenedi, onda domen obektleri validaciyalar, esaplawlar, qaǵıydalar hám basqalar sıyaqlı az yamasa hesh qanday biznes logikasın óz ishine almaydı. Biznes logikası baǵdarlamanıń óziniń arxitekturasına qosılǵan, bul refaktoringti hám texnikalıq xızmet kórsetiwdi qıyınlastıradı hám kóbirek waqıt aladı.
Sholıw
Bul anti-pattern birinshi márte Martin Fauler tárepinen súwretlengen[1], ol bul ámeldi anti-pattern dep esaplaydı. Ol bılay deydi:
Bul anti-patternniń tiykarǵı qorqınıshlısı, onıń obektke baǵdarlanǵan dizaynnıń tiykarǵı ideyasına qarama-qarsı keliwi; ol maǵlıwmatlar menen processti birge qosıw bolıp tabıladı. Anemik domen modeli bul tek proceduralıq stildegi dizayn, dál men sıyaqlı obekt fanatikleri... Smalltalk-taǵı erte dáwirlerimizden berli gúres alıp barǵan nárse. Eń jamanı, kóp adamlar anemik obektler haqıyqıy obektler dep oylaydı hám solay etip obektke baǵdarlanǵan dizaynnıń mánisin tolıq túsinbeydi.
Anemik domen dizaynında biznes logikası ádette domen obektleriniń jaǵdayın ózgertetuǵın ayırım klasslarda ámelge asırıladı. Fauler bunday sırtqı klasslardı tranzakciya skriptleri dep ataydı. Bul pattern Java baǵdarlamalarında keń taralǵan usıl bolıp tabıladı, múmkin EJB's Entity Beans-tıń erte versiyaları sıyaqlı texnologiyalar, sonday-aq «Biznes Obektler» kategoriyasına kiretuǵın úsh qatlamlı xızmetler baǵdarlaması arxitekturasına iye .NET baǵdarlamaları tárepinen qollap-quwatlanıwı múmkin (biraq Biznes Obektler tártipti de óz ishine alıwı múmkin)[2].
Kópshilik biznes baǵdarlamaların tranzakciyalar seriyası dep oylawǵa boladı. Tranzakciya ayırım maǵlıwmatlardı belgili bir tárizde shólkemlestirilgen dep kóriwi múmkin, basqası oǵan ózgerisler kirgizetuǵın boladı. Klient sisteması menen server sisteması arasındaǵı hárbir óz-ara tásir belgili bir logikanı óz ishine aladı. Ayrım jaǵdaylarda bul maǵlıwmatlar bazasındaǵı maǵlıwmatlardı kórsetiw sıyaqlı ápiwayı bolıwı múmkin. Basqalarında validaciyalar hám esaplawlardıń kóp basqıshların óz ishine alıwı múmkin. Tranzakciya Skripti bul barlıq logikanı tiykarınan bir procedura sıpatında shólkemlestiredi, maǵlıwmatlar bazasına tikkeley yamasa juqa maǵlıwmatlar bazası qabıǵı arqalı baylanısadı. Hárbir tranzakciyanıń óz Tranzakciya Skripti boladı, biraq keń taralǵan qosımsha wazıypalardı qosımsha proceduralarǵa bóliwge boladı[3].
Fauler óziniń «Enterprise Application Architecture patternleri» kitabında tranzakciya skripti patterni kóp ápiwayı biznes baǵdarlamaları ushın durıs bolıwı múmkinligin hám qıyın OO-maǵlıwmatlar bazası kartalaw qatlamın joq etedi dep atap ótti.
Anemik domen modeli Xızmetke baǵdarlanǵan arxitekturalardan tásirlengen sistemalarda payda bolıwı múmkin, onda tártip xabar almasıw/qubır arxitekturaları yamasa SOAP/REST API-leri sıyaqlı júriwge beyim emes yamasa júriwge umtıladı. COM+ hám Remoting sıyaqlı arxitekturalar tártipke ruqsat beredi, biraq veb waqıttıń ótiwi menen ajıratılǵan hám jaǵdaysız arxitekturalarǵa itibar qarattı.
Sın
Bul baǵdarlamalıq támiynat dizayn patterni anti-pattern dep esaplanıwı kerek pe, joq pa degen sınlar bar, sebebi kóplegen adamlar onıń paydasın da kóredi, mısalı:
- Logika menen maǵlıwmatlar arasındaǵı anıq ajıratıw[4].
- Ápiwayı baǵdarlamalar ushın jaqsı jumıs isleydi.
- Masshtablastırıwdı jeńilletetuǵın jaǵdaysız logikaǵa alıp keledi.
- Qıyın OO-Maǵlıwmatlar bazası kartalaw qatlamına bolǵan zárúrlikti boldırmaydı.
- Belgili bir konstruktor yamasa múlk populyaciyası tártibine qaraǵanda, aqmaq múlklerdi kútetuǵın kartalaw hám inekciya freymvorkları menen kóbirek úylesimlilik.
Keń taralǵan sın anemik domen modeli SOLID principlerine ámel etiwdi jeńilletedi degen ideya bolıp tabıladı:
«‘S’ Jalǵız Juwapkershilik Principine tiyisli, ol klass bir nárseni islewi kerek hám onı jaqsı islewi kerek dep usınadı (...)»[5].
Biraq, Robert S. Martinniń aytıwınsha, bul principti durıs túsinbew:
«SOLID principleriniń bárinen, Jalǵız Juwapkershilik Principi (SRP) eń az túsiniletuǵın bolıwı múmkin. Bul onıń ózgeshe durıs emes ataması bolǵanlıǵınan bolıwı múmkin. Baǵdarlamashılardıń atamanı esitip, hárbir modul tek bir nárseni islewi kerek dep oylawı ańsat. Qátelespeń, bunday princip bar. Funkciya bir hám tek bir nárseni islewi kerek. Biz ulken funkciyalardı kishi funkciyalarǵa refaktoring etip atırǵanımızda bul principten paydalanamız; biz onı eń tómengi dárejelerde paydalanamız. Biraq bul SOLID principleriniń biri emes—bul SRP emes. (...) SRP-niń aqırǵı versiyası: Modul bir hám tek bir aktyorǵa juwapker bolıwı kerek[6].»
Juwapkershilikler
Baǵdarlamashı anemik domen modelin qollanıw arqalı kirgizilgen belgili bir juwapkershiliklerdi esapqa alıwı kerek:
- Logikanı haqıyqıy obektke baǵdarlanǵan tárizde ámelge asırıw múmkin emes.
- Inkapsulyaciya hám maǵlıwmattı jasırıw principleriniń buzılıwı.
- Domen modelinde jaylasqan logikanı óz ishine alıw ushın ayırım biznes qatlamı kerek. Bul sonday-aq domen modeliniń obektleri ózleriniń durıslıǵına hár qanday waqıtta kepillik bere almaydı degendi ańlatadı, sebebi olardıń validaciya hám mutaciya logikası sırtta bir jerde jaylasqan (itimal bir neshe jerde).
- Obekt modeliniń hár túrli tutınıwshıları arasında domen logikasın bólisiw waqtında xızmet qatlamı kerek.
- Az mánili model jaratadı.
Mısalı
Anemik domen modeli tómendegi sıyaqlı kod jazadı (C# tilinde jazılǵan), ol ózinen-ózi biznes máseleleriniń hesh birin ámelge asırmaydı, bul jaǵdayda biyiklik yamasa keńlik nól yamasa teris bola almaydı yamasa basqa bir jerde tórt múyeshliktiń maydanına talap bar. Bul funkcionallıqlar baǵdarlamanıń «biznes» tárepinde emes, al onıń arxitekturasınıń ishinde jasırın basqa bir jerde ámelge asırıladı degendi bildiredi.
class Rectangle
{
public int Height { get; set; }
public int Width { get; set; }
}
Joqarıdaǵı klasstıń anemik emes qayta jazılıwı tómendegidey kóriniske iye bolıwı múmkin. Biznes máseleleri endi domen obektіnde sheshiledi, al arxitektura domenge ǵárezsiz bolıwı múmkin. Bul baǵdarlamaǵa arxitekturanıń ishinde basqa jerde jaramlılıq tekseriwlerin ámelge asırmastan obektler haqqında belgili bir atributlardıń haqıyqat ekenligin boljawǵa imkaniyat beredi.
class Rectangle
{
public Rectangle(int height, int width)
{
SetHeight(height);
SetWidth(width);
}
public int Height { get; private set; }
public int Width { get; private set; }
public void SetHeight(int height)
{
if (height <= 0)
{
throw new ArgumentOutOfRangeException(nameof(height));
}
Height = height;
}
public void SetWidth(int width)
{
if (width <= 0)
{
throw new ArgumentOutOfRangeException(nameof(width));
}
Width = width;
}
public int CalculateArea()
{
return Height * Width;
}
}
Derekler
- ↑ «Bliki: AnemicDomainModel».
- ↑ «Application Architecture for .NET: Designing Applications and Services». 10-yanvar 2013-jılda túp nusqadan arxivlendi. Qaraldı: 13-fevral 2013-jıl.
- ↑ «P of EAA: Transaction Script».
- ↑ «The Anaemic Domain Model is no Anti-Pattern, it's a SOLID design – SAPM: Course Blog» (4-fevral 2014-jıl).
- ↑ «The Anaemic Domain Model is no Anti-Pattern, it's a SOLID design – SAPM: Course Blog» (en-US) (4-fevral 2014-jıl). Qaraldı: 14-sentyabr 2022-jıl.
- ↑ Martin, Robert C.. Clean architecture : a craftsman's guide to software structure and design, Boston, 2018. ISBN 978-0-13-449432-6. OCLC 1003645626.