《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