صفحه 1:
=
2
DOMAIN-DRIVEN DESIGN *
+) G3 9
ci] BS
9
صفحه 2:
Domain-Driven Domain Driven
Domain-Driven)),9> aicls slo
با به اختصار ۵09 مبحثی 65
است که:در سالهای اخبر مورد نوعة
بسیاری از شرکتهای توسعهدهندهی
نرمافزار بوده و رویکرد آنها را برای
تحلیل و توسعه نرمافزارها به خصوص
نرمافزارهای بزرگ و پیچیده, به شدت
مود تانبن قرار داده انعت:
اين مبحث را اولین بار آقای Eric Evans »
Jl ۳ ۲۰۰ در کتاب خود با عنوان Design
00۳۸۱۵۱۱ مطرح کرد.
صفحه 3:
صفحه 4:
صفحه 5:
صفحه 6:
مدل دامنه
omain Model
1 ا Cryer Cs)
0
aves ees ren)
كهاى 000 از يبادءسازى درست اين فرآيندها اطمينان <
507050
5001000
عل ie
صفحه 7:
مدل دامنه
00 oseru cram Vter-1= ee
6و2 نرمافزار میباشد لذا هنگام طراحی از
خوددارى 3
صفحه 8:
مو جو د بت
Pan Land ae
ن يك كلاس به PU Gatti ere icy.
رفتارهای مختلف (86310/1055) بيادمسازى مىشود
aes ay IS 1 0
ترماقزار تغيير كند اما0| آن ثابت است.
شناسه (ID) میتواند مقداری واقعی و معتیدار باشد(مثلا
کد ملی کارمند) و یا مقداری که خود نرمافزار هنگام ثبت, به
آن اختضاصض میدهد. باشد. (مثلا کد برسنلی کارمند)
دو ۴۳۱/1۷ مختلف میتوانند ویژگیهای یکسان داشته باشتد
اما ۱۵ آنها قطعا متفاوت است. در کدهای زیر نمونهای
ساده از اینترفیس ۱80۲۷ و موجودیت 0۲06۲کن را
ملاحظه میفرمائید
صفحه 9:
public interface TentityeTentity, TED>
Tio 14 { gets }
bool Sametdhs(TEntity entity):
public class Customer + TEntity<Customer, Long>
public Jong Td ¢ get; private set; )
public string Firstnane ( get; private set; )
public string Lastname ( get; private sets )
public Custoner(long id, string firstnome, string lestnome)
if ذه -> مق
throu te ArgumentException(*rd"):
1d = 44;
تا رت دعس درو
مسا يي
public bool SameZdAs(Custoner entity)
if (entity t= nutty
1
return entity.Té =~ this.1d5
1
صفحه 10:
SEMIS
+ Objec
۱۲۲۳۹۹۹ -aeeee nto ste:
pecans
(Cierra 1 1 1 mnie Matra ny)
Berea mere Mn (eta icciao ere She Oren
صفحه 11:
public class Address
9
|
public String City ( get: private sets}
public string State get; private sets
public string BlockNo { gets private set; }
public Address(string street, string city, string state, string blocklo)
e
Address address)
city = ct 07
Blockwo = blockio;
5 Custoner + TEntity<Custoner, Longs
public long 14 { get; private set; )
public string Firstname { gets private sty}
public string Lastname (get; private set; )
public Address Address { get} private set; )
public Custener(long 1d, string Firstnase, string lastoane,
زه ع فل مذ
‘throu few ArgumentExcestion("td");
1d = ids
Firstname = Firstname;
Lastnane - lastname;
Address ~ address?
صفحه 12:
سرويس
ب rae Ch ALP
Se pel een NOPONT rime UriE rt tPel-(in ic mite
استفاده میشوند
ا 1
هیچگونه مطفشیرا در خوو ز گهداری تمه ند
از آنجا كه سرويسها مىتوائئد به ابزارهاق زمر ساعن ى(مانتد
۱7 SNE (ia (o1 Coc pe per DR fpmren Eon
een rere ioe erin cinta rere
BOISE pYefnat Ii] ae pee er ton nes Pes I ve Pee Ps
ديكر لايهها وابسته نشود
اا به طور کل به سه دسته تقسیم
صفحه 13:
انواع ها در ۵0
سرویسهای لایه دامنه
(Domain Services)
سرویسهای لابه
0
Estee)
سرويسهاى لابه
زیرساخت
eee latte)
صفحه 14:
|
] Services)
سرویسهایی که مربوط
0۳۵۴ و لایهی Businessa
نرمافزار هستند. این سرویسها
معمولاً پیادهسازی یک فرآیند.
اعتبارسنجی یک فرآیند و یا بازیابی
دادهها برای یک فرآیند(از طریق
۷ ها را برعهده دارند. ۳
Service 001۱8۵1 ها اغلببه داخل
متدها و سازندمی InjectlkEntity
شده و استفادم مشوند.
صفحه 15:
سرویسهایی که يا کلاینتهای
پیرونتی ازتناط ؟ازند وا پناهها وا
دستورات (Commands) ا به
عملیاتها و پردازشهای داخلی
0310 2 تبدیل و اجرا میکنند.
سرویسهای لایه دامنه
او تست
[۱ slagarg pw
ابلبكيشر
| یداع 011
صفحه 16:
سرویسهایی که با منایع و وب
سرویسهای 86۳0۲۵ در ارتباط
هستند. (به عنوان مثال سرویسی
زیرساختی که مسئول ارتباط با وب
سرویس ارسال پیامک میباشد.)
سرویسهای لایه دامته
(Domain Services)
صفحه 17:
oe از
Invariant
1 me 1
۱۱۱۱
صفحه 18:
90
Aggregate
EDR ETN CRIN ete WC SON ey C eRe en pe ies)
1S ME GIP D's!
ره میگيريم. PR 1
برای حل مشکلاتی | |
Peery 2
در كتابش آن را اينكونه امس از
0 ا MC PIPE \e(*] 1-1 ery
AggregateBoundary)) j,¢ S% » AggregateRoot))
میباشد. مرز۸99۲693]6 مشخص میکند که چه چیزهایی
در آن وجود دأرند.
ETT Tere Bel نيز يكرا ز/20116 er ols
مساشد و تنها شیدرون ۸39۲60216 لسحکه اشیا
بیرونیمشولنند با لنارتباط داشته و با به آنلشایه
۹
صفحه 19:
Aggregate Type 1
صفحه 20:
[007
001100 oCe re eee ies
۱۳10
۳ ۱۱ ۱۱ | glace go opt
[9 nna
Ee me MN ene es
root
6 به شی 9
صفحه 21:
Price Orderitem
(y Value: Long gy Count: Long
gy Currency: String
صفحه 22:
6۵ در قالب
seit, Object
public Price(long value, string currency)
{
Value = value;
Currency = currency;
0 }
1
صفحه 23:
۲ در
قالب یک acme Value
public long Count { get private set; }
public Pie Unitorice {gots arivate et) 7
public 0 bi ect
public orderttenCone comt, Price unitPrice)
1
وش
۱ UnitPrice = unitPrice;
TotalPrice = new Price(unitPriceValue * count, unitPrice.Cuprency);
}
صفحه 24:
۲ به عنوان
یک Entity
wvalue)s
صفحه 25:
مد ینتم بزرگ
© تام نیار عط و بز رم ont
Mel ,2 ذرگ بر مناد
ى قصد راداندات يبي براى ابن اماب
بكيريد هایی Sho oul ١
OF hii MA cad ga, Merce لات به
بئيستم 5 لازو اعد | 1 eM gS
کاتالوگ oll ct لو
داكا 5 Pls
Sa
ee ۱ كدق از
تب evs لاک تن
كك a ane شدو a
a > vos > eee مور کلی
برافمثال يى “كالا” بدن سيستم انار ممكن
أست در واقعيت با يى “محصول” در سیستم.
فروش یکی باشد اما هر کدام در سیستم خود
تعریف جداگانه و رفتارهای جداگانهای دارند. هر
5۵0۵0 آدر حالت ایدهلل[, در قالب
یک 00۴۵ 800060 آبه اختصار (86
پیاده سازی میشود.
- ود و یا
صفحه 26:
Subdomain
تقریبا 00۳0۵10 تمامی نرمافزارهای80۱6۲0۲56 از چندین
10 تشکیل شده است. شناخت5۱000۳02/8 های
۱
ey 110ص
1 yee ante
als Core Domainulsic L. sabe ubel Jgare
60۲6 میشود. تمرکز اصلی در رویکرد0۵00 بر توسعهی
10 میباشد.
ا ا ل ل 0
ال 0
ممكند اما بخشواز 000310 0056© نيستئد. ليرأ5080073
اذ ا 9
ا ا
ETT 0 ESS Te oT peer
Rar eeres ea serie
Ree Pe eres rs wr SPST
۳ pene) veo CO PIM Titc Co per Pa)
6606۲1 مفید و چه بسا | لامیاستبا عنولن50000۳0۵/05
اشناخته ميشوند
صفحه 27:
Core Domain
=
«Prout Builder
Fulfillment کر
2
~ = ceenerie Domains
Supporting Domains
ox ee زر
j Promotion
/
۱ Procurement
صفحه 28:
Bounded
۳ ری
تبديلموشوند.
در حالت ايدهدل هرهأ5060053 در پیادهسازی به یک8
تبذیل میشود. هرع8 یک واحد مستقل شناخته میشود
cia 17171
0000 Tis])
آن متفاوت باشد. برای مثال ممکن است در پیاده سازی یک 80
nen eee) ا Perel
صفحه 29:
Ix Hat @ #20.00
1x Scarf @ 410.00
Shipp و ۸2 42.97
( Hace (race order) ))
Shipping ===
Subdomain [Seles Subdomainf
Pricing Bounded ordering
Context Bounded
Context
ie
Promotion
See |
Promotion
Bounded
Context
Shopping Subdomain
Basket Bounded
صفحه 30:
Context Map
یک سیستم بزرگ میتواند86 های زیادی داشته باشد که
1
۱ ۱۳۱0۱۷ ۱۳۱۳ taf.
PUTS es teopey evar oucg PP octn total Uc vane
نحومی تبادلو اشترلکداده بینآرها را به وضوح مشخص
کنيم.
صفحه 31:
The legacy context does not
have a well formed boundary
20 context Aand B need,
translation layers to protect
integrity of their models
Legacy context is a big ball
mud, i i very hard to
BGP hind the different
models
Context Aand & integrate
through the same database
Third party application
exposes interface through a
restful service
A second third party context integrates
. & transformation layer
Two contexts share a sub
model
Third party
context
, er.
Context Y
Third party
content with flat files
helps integration with internal contexts.
صفحه 32:
"1
هنگام برفراری ارتباط Bounded
viele ub £36 L LaContext فرآیندهای 90۴0۵17
eri ۱ دارندء بهترين كار به اشتراى كداشتن
Pre 10100 قسمتی از مدل جهت آسان کردن
الايهاى جداكانه جهت برقرارى ارتباط ow dobiyl sy silo a2jLS ru1s
بين _دو 8 ايجاد مىشود نا از بهم :و80 أست. اين روش اغلب زجانى به
ريختكى مدل جلوكيرى شود. / كار مىآيد كه بى080008185ا5 در
ال
Publish- pen t
asta a0 8 3
PRY My (oikc og Senet rere ger Ay
زياد باشد و هر كدام از اين روابط
نبازمند نوشتن یک لایهی جدا برای
ا
دسته از سرويسهاى مشخص را توليد
ا 11100 3
ل 3000
ا 00
5۳۳
صفحه 33:
g
Anti-Corruption Layer ®
Elegant
د Service A |S Adapter A Complicated
Interface |] [rrentevant
3 بطم stuff
Te Transiator 1} | Facade
ery Expressive
y class 5 أ Messy
سینت Class
Even More 5
Good Stuff
[ Service B Adapter 8 You dont
(Ok, some stuff we] قال يمه سس
should probably |-~ now
refactor
صفحه 34:
Bounded بب#
Context,
a
Shared Kernel
Model B
=
Bounded context
Shared Kernal
eS ae
Model A
صفحه 35:
و«
Open Host Service
Open Host Service
/ Sales Bounded Recommendation
Context Bounded context /
Marketin. Webservice
Bound )
Context يِب
Returns Bounded
Context
صفحه 36:
Warehouse System
Publish-Subscribe SD
صفحه 37:
أهدا,
sols ۵ و ۶ 000
9 میباشر sil كامل Br كا
Ne 5550 2 ككهو زور
ee جرت
dlexae ey
بيجيده ثر شدن نرم افيه إيددى تمركز ل
گذشت Stee sl aan gg) عت گردید تا رت
Domina د لطر OS le sles
ی
۵ به ;
Pomain رد re اند
زیره
هرچند000 اجباری بر استفاده از معماری خاصی
ندارد اما بعضی معماریها مانتد معماری پیاز
Architecture) 0۳100) _توانستند - موفقیت
بیشتری در پیادهسازی اصول۵00۵ و ایزوله
کردن0000۵18 داشته باشند.
صفحه 38:
Domain-
driven
design
با تشکر از توجه
... شما