funkygao/cp-ddd-framework

View on GitHub
doc/showcase/tech.svg

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="735px" preserveAspectRatio="none" style="width:1207px;height:735px;" version="1.1" viewBox="0 0 1207 735" width="1207px" zoomAndPan="magnify"><defs><filter height="300%" id="fsqcfqw" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="144" x="545" y="17.4023">技术实现细节指引</text><!--cluster 逆向业务模型--><polygon fill="#FFFFFF" filter="url(#fsqcfqw)" points="22,99.1992,112,99.1992,119,121.6875,1200,121.6875,1200,699.1992,22,699.1992,22,99.1992" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="22" x2="119" y1="121.6875" y2="121.6875"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="84" x="26" y="114.7344">逆向业务模型</text><!--cluster Aggregate:技术实现--><polygon fill="#FFFFFF" filter="url(#fsqcfqw)" points="46,142.1992,195,142.1992,202,164.6875,1176,164.6875,1176,675.1992,46,675.1992,46,142.1992" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="46" x2="202" y1="164.6875" y2="164.6875"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="50" y="157.7344">Aggregate:技术实现</text><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="277" x="476.5" y="180.2227">«ddd.plus.showcase.wms.infrastructure»</text><!--class CartonOrderDb--><rect fill="#FEFECE" filter="url(#fsqcfqw)" height="99.8203" style="stroke: #A80036; stroke-width: 1.5;" width="324" x="68.5" y="552.1992"/><ellipse cx="181.75" cy="568.1992" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M184.2231,574.3423 Q183.6421,574.6411 183.0029,574.7905 Q182.3638,574.9399 181.6582,574.9399 Q179.1514,574.9399 177.8315,573.2881 Q176.5117,571.6362 176.5117,568.5151 Q176.5117,565.3857 177.8315,563.7339 Q179.1514,562.082 181.6582,562.082 Q182.3638,562.082 183.0112,562.2314 Q183.6587,562.3809 184.2231,562.6797 L184.2231,565.4023 Q183.5923,564.8213 182.9988,564.5515 Q182.4053,564.2817 181.7744,564.2817 Q180.4297,564.2817 179.7449,565.3484 Q179.0601,566.415 179.0601,568.5151 Q179.0601,570.6069 179.7449,571.6736 Q180.4297,572.7402 181.7744,572.7402 Q182.4053,572.7402 182.9988,572.4705 Q183.5923,572.2007 184.2231,571.6196 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="89" x="202.25" y="572.7344">CartonOrderDb</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="69.5" x2="391.5" y1="584.1992" y2="584.1992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="37" x="74.5" y="615.7891">Carton</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="69.5" x2="204" y1="598.6768" y2="598.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="204" y="602.334">Structural</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="257" x2="391.5" y1="598.6768" y2="598.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="312" x="74.5" y="645.6992">get() 如何实现BelongTo关联关系,并且通过缓存支持多次调用.</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="69.5" x2="219.5" y1="628.5869" y2="628.5869"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="219.5" y="632.2441">行为</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="241.5" x2="391.5" y1="628.5869" y2="628.5869"/><!--class OrderCartonsDb--><rect fill="#FEFECE" filter="url(#fsqcfqw)" height="99.8203" style="stroke: #A80036; stroke-width: 1.5;" width="337" x="62" y="417.1992"/><ellipse cx="178.75" cy="433.1992" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M181.2231,439.3423 Q180.6421,439.6411 180.0029,439.7905 Q179.3638,439.9399 178.6582,439.9399 Q176.1514,439.9399 174.8315,438.2881 Q173.5117,436.6362 173.5117,433.5151 Q173.5117,430.3857 174.8315,428.7339 Q176.1514,427.082 178.6582,427.082 Q179.3638,427.082 180.0112,427.2314 Q180.6587,427.3809 181.2231,427.6797 L181.2231,430.4023 Q180.5923,429.8213 179.9988,429.5515 Q179.4053,429.2817 178.7744,429.2817 Q177.4297,429.2817 176.7449,430.3484 Q176.0601,431.415 176.0601,433.5151 Q176.0601,435.6069 176.7449,436.6736 Q177.4297,437.7402 178.7744,437.7402 Q179.4053,437.7402 179.9988,437.4705 Q180.5923,437.2007 181.2231,436.6196 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="199.25" y="437.7344">OrderCartonsDb</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="63" x2="398" y1="449.1992" y2="449.1992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="56" x="68" y="480.7891">Dao Order</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="63" x2="204" y1="463.6768" y2="463.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="204" y="467.334">Structural</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="257" x2="398" y1="463.6768" y2="463.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="325" x="68" y="510.6992">totalCartonizedQty() 订单通过关联对象访问另外一个聚合内对象.</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="63" x2="219.5" y1="493.5869" y2="493.5869"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="219.5" y="497.2441">行为</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="241.5" x2="398" y1="493.5869" y2="493.5869"/><!--class TaskCartonsDb--><rect fill="#FEFECE" filter="url(#fsqcfqw)" height="99.8203" style="stroke: #A80036; stroke-width: 1.5;" width="193" x="134" y="282.1992"/><ellipse cx="181.75" cy="298.1992" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M184.2231,304.3423 Q183.6421,304.6411 183.0029,304.7905 Q182.3638,304.9399 181.6582,304.9399 Q179.1514,304.9399 177.8315,303.2881 Q176.5117,301.6362 176.5117,298.5151 Q176.5117,295.3857 177.8315,293.7339 Q179.1514,292.082 181.6582,292.082 Q182.3638,292.082 183.0112,292.2314 Q183.6587,292.3809 184.2231,292.6797 L184.2231,295.4023 Q183.5923,294.8213 182.9988,294.5515 Q182.4053,294.2817 181.7744,294.2817 Q180.4297,294.2817 179.7449,295.3484 Q179.0601,296.415 179.0601,298.5151 Q179.0601,300.6069 179.7449,301.6736 Q180.4297,302.7402 181.7744,302.7402 Q182.4053,302.7402 182.9988,302.4705 Q183.5923,302.2007 184.2231,301.6196 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="89" x="202.25" y="302.7344">TaskCartonsDb</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="135" x2="326" y1="314.1992" y2="314.1992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="49" x="140" y="345.7891">Dao Task</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="135" x2="204" y1="328.6768" y2="328.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="204" y="332.334">Structural</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="257" x2="326" y1="328.6768" y2="328.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="181" x="140" y="375.6992">contains() 另外一个关联对象的实现.</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="135" x2="219.5" y1="358.5869" y2="358.5869"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="219.5" y="362.2441">行为</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="241.5" x2="326" y1="358.5869" y2="358.5869"/><!--class TaskOrdersDb--><rect fill="#FEFECE" filter="url(#fsqcfqw)" height="112.7754" style="stroke: #A80036; stroke-width: 1.5;" width="287" x="530.5" y="545.6992"/><ellipse cx="627.25" cy="561.6992" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M629.7231,567.8423 Q629.1421,568.1411 628.5029,568.2905 Q627.8638,568.4399 627.1582,568.4399 Q624.6514,568.4399 623.3315,566.7881 Q622.0117,565.1362 622.0117,562.0151 Q622.0117,558.8857 623.3315,557.2339 Q624.6514,555.582 627.1582,555.582 Q627.8638,555.582 628.5112,555.7314 Q629.1587,555.8809 629.7231,556.1797 L629.7231,558.9023 Q629.0923,558.3213 628.4988,558.0515 Q627.9053,557.7817 627.2744,557.7817 Q625.9297,557.7817 625.2449,558.8484 Q624.5601,559.915 624.5601,562.0151 Q624.5601,564.1069 625.2449,565.1736 Q625.9297,566.2402 627.2744,566.2402 Q627.9053,566.2402 628.4988,565.9705 Q629.0923,565.7007 629.7231,565.1196 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="85" x="647.75" y="566.2344">TaskOrdersDb</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="531.5" x2="816.5" y1="577.6992" y2="577.6992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="49" x="536.5" y="609.2891">Dao Task</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="531.5" x2="647.5" y1="592.1768" y2="592.1768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="647.5" y="595.834">Structural</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="700.5" x2="816.5" y1="592.1768" y2="592.1768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="274" x="536.5" y="639.1992">pendingOrder() 关联对象实现业务校验,避免逻辑泄露</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="275" x="536.5" y="652.1543">pendingOrders() 如何实现关联对象,注入dao和entity</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="531.5" x2="663" y1="622.0869" y2="622.0869"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="663" y="625.7441">行为</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="685" x2="816.5" y1="622.0869" y2="622.0869"/><!--class TaskPo--><rect fill="#FEFECE" filter="url(#fsqcfqw)" height="99.8203" style="stroke: #A80036; stroke-width: 1.5;" width="331" x="508.5" y="410.1992"/><ellipse cx="648.75" cy="426.1992" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M651.2231,432.3423 Q650.6421,432.6411 650.0029,432.7905 Q649.3638,432.9399 648.6582,432.9399 Q646.1514,432.9399 644.8315,431.2881 Q643.5117,429.6362 643.5117,426.5151 Q643.5117,423.3857 644.8315,421.7339 Q646.1514,420.082 648.6582,420.082 Q649.3638,420.082 650.0112,420.2314 Q650.6587,420.3809 651.2231,420.6797 L651.2231,423.4023 Q650.5923,422.8213 649.9988,422.5515 Q649.4053,422.2817 648.7744,422.2817 Q647.4297,422.2817 646.7449,423.3484 Q646.0601,424.415 646.0601,426.5151 Q646.0601,428.6069 646.7449,429.6736 Q647.4297,430.7402 648.7744,430.7402 Q649.4053,430.7402 649.9988,430.4705 Q650.5923,430.2007 651.2231,429.6196 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="42" x="669.25" y="430.7344">TaskPo</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="509.5" x2="838.5" y1="442.1992" y2="442.1992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="201" x="514.5" y="473.7891">TaskMode/(use MyBatis TypeHandler)</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="509.5" x2="647.5" y1="456.6768" y2="456.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="647.5" y="460.334">Structural</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="700.5" x2="838.5" y1="456.6768" y2="456.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="319" x="514.5" y="503.6992">shouldHaveNoLogic() po对象不能有任何setter getter外的逻辑</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="509.5" x2="663" y1="486.5869" y2="486.5869"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="663" y="490.2441">行为</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="685" x2="838.5" y1="486.5869" y2="486.5869"/><!--class TaskRepository--><rect fill="#FEFECE" filter="url(#fsqcfqw)" height="181.5508" style="stroke: #A80036; stroke-width: 1.5;" width="430" x="459" y="193.1992"/><ellipse cx="625.25" cy="209.1992" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M627.7231,215.3423 Q627.1421,215.6411 626.5029,215.7905 Q625.8638,215.9399 625.1582,215.9399 Q622.6514,215.9399 621.3315,214.2881 Q620.0117,212.6362 620.0117,209.5151 Q620.0117,206.3857 621.3315,204.7339 Q622.6514,203.082 625.1582,203.082 Q625.8638,203.082 626.5112,203.2314 Q627.1587,203.3809 627.7231,203.6797 L627.7231,206.4023 Q627.0923,205.8213 626.4988,205.5515 Q625.9053,205.2817 625.2744,205.2817 Q623.9297,205.2817 623.2449,206.3484 Q622.5601,207.415 622.5601,209.5151 Q622.5601,211.6069 623.2449,212.6736 Q623.9297,213.7402 625.2744,213.7402 Q625.9053,213.7402 626.4988,213.4705 Q627.0923,213.2007 627.7231,212.6196 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="89" x="645.75" y="213.7344">TaskRepository</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="460" x2="888" y1="225.1992" y2="225.1992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="233" x="465" y="256.7891">converter/如何克服Java访问权限控制粒度问题</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="460" x2="647.5" y1="239.6768" y2="239.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="647.5" y="243.334">Structural</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="700.5" x2="888" y1="239.6768" y2="239.6768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="418" x="465" y="286.6992">mustGet() 如何把数据库里的数据转换为充血模型的IDomainModel,并注入关联对象</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="188" x="465" y="299.6543">mustGet() 如何从数据库加载场景对象</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="263" x="465" y="312.6094">save(Task) 如何把充血模型落库,dirty hint,乐观锁</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="268" x="465" y="325.5645">save(TaskOfContainerPending) 如何使用mapstruct</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="465" y="338.5195">save(TaskOfOrderPending)</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="460" x2="663" y1="269.5869" y2="269.5869"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="663" y="273.2441">行为</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="685" x2="888" y1="269.5869" y2="269.5869"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="269" x="465" y="368.4297">toPo(Task) 如何落库时处理查询和报表使用的冗余字段</text><text fill="#808000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="737" y="368.4297">TaskConverter</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="460" x2="663" y1="351.3174" y2="351.3174"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="663" y="354.9746">流程</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="685" x2="888" y1="351.3174" y2="351.3174"/><!--class CartonRepository--><rect fill="#FEFECE" filter="url(#fsqcfqw)" height="82.8652" style="stroke: #A80036; stroke-width: 1.5;" width="211" x="949" y="560.6992"/><ellipse cx="1000.75" cy="576.6992" fill="#9197DB" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M999.1533,578.0713 L999.1533,581.7402 L1000.7803,581.7402 Q1001.9507,581.7402 1002.4197,581.3418 Q1002.8887,580.9434 1002.8887,579.9556 Q1002.8887,578.9512 1002.3989,578.5112 Q1001.9092,578.0713 1000.7803,578.0713 Z M999.1533,573.2402 L999.1533,576.1206 L1000.7803,576.1206 Q1001.71,576.1206 1002.1042,575.7886 Q1002.4985,575.4565 1002.4985,574.6929 Q1002.4985,573.9292 1002.0959,573.5847 Q1001.6934,573.2402 1000.7803,573.2402 Z M996.7876,571.2896 L1000.7803,571.2896 Q1002.8472,571.2896 1003.8889,572.074 Q1004.9307,572.8584 1004.9307,574.4189 Q1004.9307,575.6143 1004.3164,576.2866 Q1003.7021,576.959 1002.5151,577.0669 Q1003.9346,577.208 1004.6526,578.0215 Q1005.3706,578.835 1005.3706,580.2959 Q1005.3706,582.0889 1004.2915,582.894 Q1003.2124,583.6992 1000.7803,583.6992 L996.7876,583.6992 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="99" x="1021.25" y="581.2344">CartonRepository</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="950" x2="1159" y1="592.6992" y2="592.6992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="199" x="955" y="624.2891">save() 可合并的hint如何合并数据库请求</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="955" y="637.2441">save() Bag of root如何持久化</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="950" x2="1043.5" y1="607.1768" y2="607.1768"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="1043.5" y="610.834">行为</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1065.5" x2="1159" y1="607.1768" y2="607.1768"/><polygon fill="#FFFFFF" filter="url(#fsqcfqw)" points="157,29.6992,261,29.6992,268,52.1875,304,52.1875,304,82.6758,157,82.6758,157,29.6992" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="157" x2="268" y1="52.1875" y2="52.1875"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="161" y="45.2344">跨聚合复杂流程</text><text fill="#000000" font-family="sans-serif" font-size="14" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="125" x="172" y="67.7227">«Orphan Services»</text><text fill="#888888" font-family="sans-serif" font-size="10" lengthAdjust="spacingAndGlyphs" textLength="108" x="563" y="734.8672">generated by DDDplus</text></g></svg>