《2018年基于FP的DDD實踐.pdf》由會員分享,可在線閱讀,更多相關《2018年基于FP的DDD實踐.pdf(43頁珍藏版)》請在三個皮匠報告上搜索。
1、?FP?DDD?CONTENTS01DDD?FP02?03?DDD?FPDDD?FPCQRSUse CaseUser StoryDCIDomain EventEvent SourcingEvent StormingClean ArchitectureOnion ArchitectureTDDHexagonal ArchitectureMicroserviceOO?領域模型是為構建的種向領域的指性語義 選擇某種編程范式就選定了構建領域模型的基礎 程上需要考量哪種編程范式與領域語義的 gap 最 現代編程語基本都持多范式,程序員可以在局部靈活選擇FP?DDD?業務場景:規則領域,計算領域 設計層次
2、:BC內建模,戰術設計 建模元素:值對象,領域服務?1?UL?數:counting 三形:triangle 點:point 線:line 點的集合:points 線的集合:lines?counting trianglecountingtriangle?Pointtype Point=bytetype Line=string?Line?:3PointPointa,b,c?:3LineLineab,bc,acUL?數:counting 三形:triangle 點:point 線:line 點的集合:points 線的集合:lines 兩點相連:connected 三點在同直線上:in_same_l
3、ine:not?counting trianglecountingtriangleconnectedin_same_linenotconneted&in_same_line?:connected(x,y)?in_same_line(x,y,z)n?lines?belong(points,lines):(Points,Line)-boolbelong?:connected(x,y)-belong(“xy”,lines)in_same_line(x,y,z)-belong(“xyz”,lines)UL?數:counting 三形:triangle 點:point 線:line 點的集合:point
4、s 線的集合:lines 兩點相連:connected 三點在同直線上:in_same_line:not 屬于:belong?counting trianglecountingtriangleconnectedin_same_linenotbelong?:points?linestype Points=stringpoints:=abcdefghijk lines:=Lineabh,acgi,adfj,aek,bcde,hgfe,hijk?:?UL?數:counting 三形:triangle 點:point 線:line 點的集合:points 線的集合:lines 兩點相連:connect
5、ed 三點在同直線上:in_same_line:not 屬于:belong 序集:subset遍歷:traversal?counting trianglecountingtriangleconnectedin_same_linenotbelongsubsettranversalsubset(a,b,c)-“abc”Pointa,b,c-Points(Pointa,b,c)subset(points,n):(Points,int)-Points“abc”?subset(points,3)subset(points,n)when len(points)?subset(points,n)when l
6、en(points)=n-pointssubset(points,n)when n=1-points0,points1,.,pointslen(points)-1subset(points,n)-firsts=subset(points1:,n-1)with points0 lasts=subset(points1:,n)firsts append lasts?model?subset(points,3)?domain service?subset(points,3)?2?UL?數:counting 三形:triangle 點:point 線:line 點的集合:points 線的集合:lin
7、es 兩點相連:connected 三點在同直線上:in_same_line:not 屬于:belong 序集:subset遍歷:traversal 四邊形:quadrangle?counting quadanglecountingquadangle?UL?數:counting 三形:triangle 點:point 線:line 點的集合:points 線的集合:lines 兩點相連:connected 三點在同直線上:in_same_line:not 屬于:belong 序集:subset遍歷:traversal 四邊形:quadrangle 尾依次相接圍成個環:ring_order_co
8、nnected 兩條線段相交:cross_connected?counting quadanglecountingquadanglering_order_connectedcross_connectednotin_same_linenotbelongring_order_connected?n?subset(points,3)ring_order_connected(x1,x2,.,xn)-connected(x1,x2)and connected(x2,x3)and .connected(xn-1,xn)and connected(xn,x1)?connectedbelongcounting
9、 quadanglecountingquadanglering_order_connectedcross_connectednotin_same_linenotcross_connected?ring_order_connected(a,b,c,d)?cross_connected(ad,bc)cross_connected(ab,cd)?:?UL?數:counting 三形:triangle 點:point 線:line 點的集合:points 線的集合:lines 兩點相連:connected 三點在同直線上:in_same_line:not 屬于:belong 序集:subset遍歷:t
10、raversal 四邊形:quadrangle 尾依次相接圍成個環:ring_order_connected 兩條線段相交:cross_connected 有序集合:order_set?connectedbelongcounting quadanglecountingquadanglering_order_connectedcross_connectednotin_same_linenotsubsettranversalorder_set?subset(points,3)?(x1,x2,.,xn)?n!set(x1,x2,x3,x4)-order_set(x1,x2,x3,x4)or orde
11、r_set(x1,x2,x4,x3)or order_set(x1,x3,x2,x4)or order_set(x1,x4,x2,x3)or order_set(x1,x3,x4,x2)or order_set(x1,x4,x3,x2)?n=4?set?order_set?(n-1)!?x1?x2?n-1?x3?n-2?x2?2?xn?model?domain service?subset(points,3)?counting trianglecountingtriangleconnectedin_same_linenotbelongsubsettranversalring_order_connected?model?FP?match?match?matchn?n?subset(points,3)https:/ YOU