回到目录

本文来自于实践中的不足

在最近开始过程中,遇到了一个问题,之前设计的工作单元UoW只支持Insert,Update,Delete三种操作,即开发人员可以将以上三种操作同时扔进工作单元,由工作单元UoW负责事件的处理,这种设计已经出现很多年了,大叔感觉也是不错,思路就是在工作单元里添加三个字典对象,用来存储你的Insert,Update,Delete操作,然后在commit时,统一进行提交!

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5YAAAHNCAIAAADqv3M0AAAgAElEQVR4nO296VsTh964//1T5j/54bvyor1osW+q9py2T6u2z1FZ4tKW55w+lpSqVREhVpElCKLIHiDgEpQgCXvQutcFERICnp629vS0fTq/F1nJxiTMmtz3dV+9wmQymcgnk7tDIP9PBAAAAAAwFP9P6x0AAAAAAEgPEhYAAAAADAYJCwAAAAAGg4QFAAAAAINBwgIAAACAwSBhAQAAAMBgkLAAAAAAYDBIWAAAAAAwGCQsAAAAABgMEhYAAAAADAYJCwAAAAAGg4QFAAAAAIORYcL++uuvfr///v379+/fnwMAAAAA2BiBsFxaWvrll18USdjFxUWPx+N0Ovv7++12e09PT19fXz8AAAAAQEZ0d3fb7faBgYGrV6/Ozs4+fvz4jz/+kC1hf/3117t3746OjnZ2dg4ODjocjmEAAAAAAJkYGhrq7Oy8cuXK7du3X716JUPC/vLLL3Nzczabrbu7+9q1a1o/QAAAAADIQhwOR19fX1dX18zMzM8//7yhhP3zzz/v3LnT29trt9u1flwAAAAAkOVcuXKlq6vr1q1bCd9RIDVhFxYWRkZGent7tX44AAAAAJATDAwMXLly5fHjxxkm7K+//urxeLq6unj/AAAAAACoRldX1/T0dPzbCSQl7NLS0vDw8ODgoNaPAgDA8AiCEP5vihVSLwEAyBGuXLkyNDT05MmTTBL2/v37/f39/P0BAMgO0mrEmKuSfSkkJ+EGU1dp9LUJtyDxvgAAsoDe3t7bt29nkrC3b9+22Wxa7z8AgDwokbDpbi1ZfZKnAAAx9PX1zc3NZZKwgb+lpfX+AwDIQ4qETZiM0dfGfyll+zFXpTgRm+z8KwkLADmL3W7PPGH7+vq03n8AAHlIlrDJzrDKlbDJyjh+Hc7CAgCEGRwczDxh+/v7td5/AAB50CRh4+8i9RnfZJdTNC6lCwBZCQkLADA8nGnCxgdlumdhE24kfgWJbbrupgAAsgMSFgBgeDj9hB1O9B4AiZ2a4qp1uzP1CiQsAOQIG01YBwBAtiAIQvzl6IXJ1kmxJN2rYk6yxi+JR/ruAQBkDRv6dS4SFgCyjGRduG4vJluS7lXrdqf0u0hW4QAAWQAJCwCgBkonbIqeJmEBIPsgYQEAFEH6GwA2nrApujb+5DEAQBZAwgIAAACAwSBhAQAAAMBgkLAAAAAAYDBIWAAAAAAwGCQsAAAAABgMEhYAAAAADAYJCwAAAAAGg4QFAAAAAINBwgIAAACAwSBhAQAAAMBgkLAAAAAAYDBIWAAAAAAwGCQsAAAAABgMEhYAAAAADAYJCwAAAAAGg4QFAAAAAINBwgIAAACAwSBhAQAAAMBgkLAAAAAAYDBIWAAAAAAwGCQsAAAAABgMEhYAAAAADAYJCwAAAAAGg4QFAAAAAIOxoYTt6+u7BgAAAACgLiQsAAAAABgMEhYAAAAADAYJCwAAAAAGg4QFAAAAAINBwgJoj8vR9/D6+Z9Ga34arfnTeUh0ViAiKmrggPPsRuO4w6b1IRAgE0hYAI15cqP5t7Gq/5ttFO/3iPM3xMUJceWeuPoAEVEpl6bE+Rviw37xVsvvY1XLzrM3rl3W+lgIkB4kLIBmuBx9r0ZP/jFrFZ9dF394Kv77B/E/PyEique/nosLrj+/a/v1ZtWko0frgyJAGpCwANow7rD9drNSfGATl6bFf6+K//kREVEDf/1BXLkrfj/4u+vktKNL60MjgFRIWAANGL525ZfRk+LDfvHlI/HXfyEiauxPi+Ljq7+NVvKOAjAKJCyABszfaPpj9pzo9Yi//oCIqAtXH/z5Xduy86zWB0gASZCwAGrjcvT9NlYlPrshvvKL//4nIqJefDH+u7uGtxOAISBhAdTm6fWmPz3nxJffi/9+iYioI396Id7hRCwYAxIWQG1+Gq0RH/SKr/ziLyuIcnrFJAiCIAhlVza8qfuWzYJpRPNHhOo77/xt9JjWh0mA9SFhAdTmt9Fj4vOb4is/Zr+XS4UgBdb7fvF+zWahdCR8bcyXMYavjVttvrYgtFmh7HJ4ua0scC+v/CMHhM21s1HbCS4P3DZyVQpT7xtmscu3RWeF1odJgPUhYQHU5k/nIXFpWny1jDnh/erNQulI/OX4L6Vs4dXyfO0bwpoNCmWXY1ebr31DeKt6PrJ+aJ1XyyMHIpel3ynmkCv3SFgwBCQsgNqIzgpx+Zb4yoc54f3qzULJSPzl6C/vV28WSqy1b4ROrEZfO2N9K3zKtWTkVW+Z8Ib1fmT7oVqNWu2t6vmoOxo58Ia1tkQ40Cu+8omvZqxvRe9MeLORewzsRllteAsz1reE0M0xB1x9QMKCISBhAdRGdFaIy7fFn72YE947uVkoGYm/HP3lvZObBWHzmSnxZ694uUR46+R87LVJtpBstZ+7y4Q3rPcCF0pG7p3cHN5m4MLPU9a3hLLLXvFn7/yZN4T93WLMbgS3NmV9K7QEc8TV+yQsGAISFkBtQgm7hDnhvarNQvFI/OXoLxOuk/Day8XCW1Xzsdt/w3ovduMj+4XNZybFe1Wb93eLP09a33rDem9JvFws7O9OuldxC8sCG9H83xDVdJU3EoAxIGEB1Cb4RoKfFjEnvFu1WSgeib8c/WXCdVJfm3ojPy3On35D2N8lDhZvPj0Z+LJscHFkv1A2uCj+tCgOFgtvVs0HV+4qE96w3o2/I0EQBGF/l/b/hqimvBcWDAIJC6A2orNC9N0Sf3yBOeGdE5uFopH4y9FfJlwn4bU/dpYJr1vvRLY/f/p14c0T80k2XrZPKBt8If74Qhws2ny60/pm6Lap7zFyecL6ZmgLmCP675KwYAg2mrBXASBNRGeF6JsTf3yOOeGdys1C0UjwS7f1TWHzaXfgqpF9grCvI3ad8OXIwo4y4XXrneAG50+/LqxZWSgbjL+jwK2EyJo/dpS9+frmNyvno/YkcMP506+n2o21947Zr/+O6KzQ+jAJsD4DAwMkLICqiM4K0ecR/zWP2a99T+jPBLxuvRNY2F4W/gMDbx6fD6x25/hmYc9IzOWohSP7AjcIfjn/7euRvwtrD91X9EbCtwrfxb9c1jcFYV97ZN/uHA/9RYK4u465bN8Ttf+Y7fq/I2HBEJCwAGojOitEr0f84Rkiou5cJmHBGJCwAGojOitE76z4w1NERN25fJuEBUNAwgKoTTBh//kEEVF3+m6RsGAISFgAtRGdFaJ3Rvzn94iIutM3R8KCISBhAdRGdFaI3mnxn48QEXUnCQsGgYQFUBvRWSEuTYsvHyIi6k6fh4QFQ0DCAqiN6KwQl6bE1QeIiLrTO0vCgiEgYQHURnRWiItT4sp9RETdScKCQSBhAdRGdFaIi5Piyj1ERN3pnSFhwRCQsABqE0xY/11ERN25NE3CgiEgYQHURnRWiIsTov8OIqLuJGHBIJCwAGojOivEFxPi8neIiLpzcYqEBUOwoYS12WxXACBNRGeF+GJcXL6NiKg7F6dEZ4XWh0mA9SFhAdQmmLC+W4iIunNxkoQFQ0DCAqiN6KwQX7hFnwcRUXcuTpCwYAhIWAC1EZ0V4oJL9M4iIurOF+MkLBgCEhZAbUIJO4OIqDtfuElYMAQkLIDaiM4KcWFMXJpGRNSdCyQsGAMSFkBtQgk7hYioOxdcJCwYAhIWQG1EZ4X4/Ka4OImIqDtJWDAIJCyA2ojOCnHeKS5OICLqzoUxEhYMAQkLoDa/jR4Tn14TX4wjIurO56MkLBgCEhZAbX52nhQf9YsLbkRE3fnE8fvoN1ofJgHWh4QFUJvFG3XidxfE+Zvicxcior681/WD06L1YRJgfUhYALWZudb++/gp8dkN8fkYIqKOfDbyf9P1dx0tWh8mAdaHhAXQgB+cFvFelzg/Ij4fRUTUhfNO8WH/q9GT164MaX2MBFgfEhZAA25cGfhttFJ8fFWcHxHnnYiI2vvE8ZvrpPtar9YHSABJkLAA2nDbcfH38VPi46visxvi/AgionbeEJ9c+2P67KPrzVofGgGkQsICaMad4dbfRivFe13i0+visxuIiBr49Lr4aOA3Vw39CsaChAXQkhtXBn5wWv6YPive7RSfDotPryOm69OxTs33AY3psPjA9n+zjf8erZq41q314RAgPUhYAO35ztH60vmt6KxATNe7l74o3r1rpL5M8z1BI/qz8+R9RzO/vwVGhIQFADAwx48fLdq9q/zL/9V6RwAAVGWjCXsZAAC0Y5+ptGj3rtLiPYN2u9b7AgCgHv39/SQsAIAhaWqylhYXFe3eVVK059tTFq13BwBAPUhYAACj8tmBfUW7dwXcW1rCiVgAyB1IWAAAQ9LUZN1bUhJOWFNxMSdiASB3IGEBAAxJ9ClYTsQCQK5BwgIAGI+YU7CciAWAXIOEBQAwHvGnYDkRCwA5BQkLAGAwmpqspcV7EiZsSTF/mgAAcgISFgDAYNSePv33srKAn+7fX7R79/69e8NLTlad0HoHAQAUh4QFADAw9fV1Rbt31VSf1HpHAABUhYQFADAwJCwA5CYkLACAgSFhASA3IWEBAAwMCQsAuQkJCwBgYEhYAMhNSFgAAANDwgJAbkLCAgAYGBIWAHITEhYAwMCQsACQm5CwAAAGhoQFgNyEhAUAMDAkLADkJiQsAICBIWEBIDchYQEADAwJCwC5CQkLAGBgSFgAyE1IWAAAA0PCAkBuQsICABgYEhYAchMSFgDAwJCwAJCbkLAAAAaGhAWA3ISEBQAwMCQsAOQmJCwAgIEhYQEgN9lQwvb29g4BAIB21NWdDSSs1jsCAKAqfX19JCwAgFEhYQEgNyFhAQAMDAkLALkJCQsAYGBIWADITUhYAAADQ8ICQG5CwgIAGBgSFgByExIWQFlGr/Tcu3buR2f1j87qP52HRGcFooxOt/y9aPcu++nPNN8TzD4DB64nww1jV7q1PpQCxELCAijI98PW38aq/m+2UbzfI87fEBcnxJV74uoDRLn83XfH3nFu9fspzfcEs82lKXH+hviwX7zV8vtYlW/kzLWhAa2PqQARSFgARRi90vOzs+qPWav47Lr4w1Px3z+I//kJEdF4/uu5uOD687u2X0dPuK90an1wBQhCwgLIz9iV7t9uVooPbOLStPjvVfE/PyIiGthffxBX7orfD/7mOjlxpV3rQyzA0BAJCyA7V4bsr0arxIf94stH4q//QkTMEn9aFB9f/c/ocd5RAHqAhAWQmafDjX/MnhO9HvHXHxARs8rVB39+1+YbOaP1gRaAhAWQldErPb+NVYnPboiv/OK//4mImG2+GP/dXcPbCUBzSFgAOXnsaPzTc058+b3475eIiFnoTy/EO21eTsSC1pCwAHLyo7NafNArvvKLv6wgquQVkyAIgiCUXdnwpu5bNgumEc0fEerceedvo8e0PtxCrkPCAsjJb6PHxOc3xVd+xIj3azYLpSPJvky2ctxq87UFQoiyy+HltjKhwHrfL77yjxwQNtfORm0nuDxw28hV0ncVMaHLt0VnhdaHW8h1SFgAOfnTeUhcmhZfLSNGvF+9WSgdSfaltFvN174hhL+8X71ZEMoux642X/uG8Fb1fGT90DqvlkcORC6nsauICV25R8KC5pCwAHIiOivE5VviKx9ixPvVm4WSkfgv71dvFkqstW+ETqxGXztjfSt8yrVk5FVvmfCG9X5km6FajVrtrer5qDsaOfCGtbZEONArvvKJr2asb4V24H715shmI/cY2I2y2vAWZqxvCaGbI6519QEJC5pDwgLIieisEJdviz97ESPeO7lZKBmJ//Leyc2CsPnMlPizV7xcIrx1cj722tCtYraQbLWfu8uEN6z3AhdKRu6d3BzeZuDCz1PWt4Syy17xZ+/8mTeE/d1izG4EtzZlfSu0BDHe1fskLGgOCQsgJ6GEXUKMeK9qs1A8Ev9l9PL4hdHXXi4W3qqaj93mG9Z7sRsf2S9sPjMp3qvavL9b/HnS+tYb1ntL4uViYX937J4k342ywEY0/3dD3brKGwlAe0hYADkJvpHgp0XEiHerNgvFI/FfRi+PX5jw2tQb+Wlx/vQbwv4ucbB48+nJwJdlg4sj+4WywUXxp0VxsFh4s2o+uHJXmfCG9W78HQmCIAj7u7T/d0PdynthQQeQsAByIjorRN8t8ccXiBHvnNgsFI3Efxm9PH7hmlt1lgmvW+9Etjl/+nXhzRPzSTZetk8oG3wh/vhCHCzafLrT+mbotqnvMXJ5wvpmaAuI8frvkrCgOSQsgJyIzgrRNyf++BwxSrf1TWHzaXfgy5F9grCvQ/zxuXincrNQNBJYJ3w5srCjTHjdeie4kfnTrwtrVhbKBp/HbiR4KyGy5o8dZW++vvnNyvmoPQnccP7066l2Y+29I67Rf4eEBc0hYQHkRHRWiD6P+K95xLW2l4X/wMCbx+cDC+8c3yzsGYm5HLVwZF/gBsEv5799PfJ3Ye2hLUdvJHyr8F38y2V9UxD2tUf25M7x0F8kiLvrmMv2PYLwuvWO5v90qD/935GwoDkkLICciM4K0esRf3iGiJi1LpOwoD0kLICciM4K0Tsr/vAUETFr5dO5QAeQsAByEkzYfz5BRMxafbdIWNAcEhZATkRnheidEf/5PSJi1uqbI2FBczaasIMAEIXorBC90+I/HyEiZq2+OdFZofXhFnIdEhZATkRnhbg0Lb58iIiYtfo8JCxojtoJe6F76EjTlU9ODn9ycvjtCkehGXPdwDAcrLva0jmkxIirjOisEJemxNUHiIhZq3eWhAXNUTVhKxqvfnBiZJ919ujA96euzTe7vZcml9unMHc9P+47dW2+cvDx5623Pzjh3H/a0dOn0KirhOisEBenxJX7iIhZKwkLOkClhL3QPbSjavjAuZnGm0vdsysDt1YHb79EDNszu9Ls9n7Zcfe/Km9Y2w18OlZ0VoiLk+LKPUTErNU7Q8KC5qiRsC2dQ+8du3Hc/rh13Nc/99J+CzGBA3Mv2yaXLY75j06ONrRfVnr0FSKYsP67iIhZ69I0CQuao3jC9g8M7qi6XnX5aee0X/NIQv3b61k9c+P5e8euG/QdBaKzQlycEP13EBGzVhIWdIDiCVve4Pis2dM64Ru49RJRiu3T/i877u4/7VDhCSA7orNCfDEhLn+HiJi1Lk6RsKA5yibshe6hD06MNN5c7POsDswhSrXF7d1Rc9OIbycQnRXii3Fx+TYiYtZKwoIOUDZhzfVXP2u51Tnt759bRZRuz+zKwY57Bwx4IjaYsL5biIhZ6+IkCQuao2zCfnJy+Lj9+z6P9kmUEzaaBKFg75DWuyGTdSMLf/lmWJ2ngYyIzgrxhVv0eRARs9bFCRIWNEfZhP3LN8N1zoW+uVVj2GgSghSYhlb7hiybhAjbGpW50yHLJsF0JPrCBh9CvqUxdnnfto1vWXUvTvgKzcY8C7vgEr2ziIhZ64txEhY0R9mEfbvCcX7cq3kMpWF0R0ZfbjQJSlegLAkb55GdgQI3XsK2Ty0bOWFnEBGz1hduEhY0R9mELTQ7Lkz4bHOrhnHIskkwHY6/PNe3TSgwDYUvB7swes1tOyNncKO2tnbNudUGc0FwWb6lIXIvc6b88Alf0+GEtx2ybBJMptDNtzWG7qXRFNyUlAdlHDum/YZN2DFxaRoRMWtdIGFBexRP2IuTvl7PimEctGwSTIfiLtebC4R8S71npdfjKc0XtjaEVthpC60ZXJhwzXpzgRBeM3jtyqGdpkPR9xJ918luKwibzJ5ez0pvgym40LNyaGdof6Q8KOPYbuyEnUJEzFoXXCQsaA4Jm7z2BqPfC5uga3s9tq3x9ZkwSRN3qoT1k942dNeRC9IelHE0cMI+vykuTiIiZq0kLOgAEjZ57YUvN5gEoaB0cKU3eDma5HHZYAqdjg0sDG6hPvROgOD51ISFmvC2a0v00E5hk9lTby4IbkfigzKOBk7Yeae4OIGImLUujJGwoDlqvBe2Z3bFMNoteYLp67jLdeUFQr6lLmaF1LdKsqmQtq1CQYldwvoJVwh8mW/aml9QYk/nQRnHS1OGTNj/jB4Vn14TX4wjImatz0dJWNAcEjZ57a0pP09JvpBX7om6sNIz6ynZEdu1X+8QhB228E22Nqz0BAo4sLDBFFjSM2vbGhumoahNdtvYEvWU5AvBsJb+oIyjQRP2Z2eV+KhfXHAjImatTxy/j36j9eEWch01ErZ7xm8M60rDfxe2xO7vttfkCaVfh6+11+QJQl75bPeMbUv0aqGrgrxWU7f2JoIgCJHthG8rbKkLrxO89usdUSvH3zZmf2b8X+8IbSS5oW0KQnDntf5HluylSUP+Ua0X18+K310Q52+Kz12IiNnpva5/jli0PtxCrrOhhO3p6bGnpNDsaJ3wdc34s1x7TZ5QWqH2/dq2aHCn6tk2uVxodqQeMB0yefnib+OnxGc3xOdjiIhZ6LORP6brv7t6TuvDLeQ6NpuNhN2wWiTs2fICYYdN+8eumAZNWLvd/s8Ri3ivS5wfEZ+PIiJmlfNO8WH/K2fVkL1f62Mt5DrKJ+y4r3Paj5iuFw2bsI5B22+jleLjq+L8iDjvRETMHp84fhs7OTrUqfWBFoCERb1q3IS12+1zV1p/Gz8lPr4qPrshzo8gIhrfG+KTa39Mnb1/rUnrQyyA3U7Com41dMLa7fbbV1t+G60U73WJT6+Lz24gIhrYp9fFRwP/cdXQr6AfFE/Y8+O+jmk/YroaPWHtdrtj0PbPEcsfU2fFu53i02Hx6XWU4tOxTs33ATHeXJ3MYfGB7f9mG//tPOG63KH1YRUgghoJ2z7tR0zXC8ZP2AC3rrasjpwSnRUoxbuXvijevWukvkzzPUGMNpcn82dn1d2rTfz+FugNEhZ1atYkLKTFsWPfFO3e9eXBL7TeEYA1MJkAekPxhG0Z916aWkZM1wsTPhI2B9lnKi3avau0eE9/X5/W+wIQgckE0BskLOpUEjYHaWxsKC0uKtq9q6Roj8VSo/XuAARhMgF0iBoJ2za1jJiurSRs7vHp/n1Fu3cF3Ftawuku0AlMJoAOUT5h3d62yWXEdCVhc43Gxoa9JSXhUCgtLuJ0F+gBJhNAnyiesM1u78XJZcR0PU/C5hjRJ7o43QX6gckE0CckLOpUEjaniDnRxeku0AlMJoBu2WjCDqQkkLAXJnyI6Xp+3FdodqQeMMga4k90hU939dlsWu8d5C5MJoBu6e3tJWFRj5KwuUNjY0Np0Z6EoVBStMdSU631DkKOwmQC6BnFE/ac29s64UNM1xYSNmf49tSp//n884AH9u0r2r17/15TeMmJyuNa7yDkKEwmgJ5RPmFd3tZxH2K6trhJ2FyktvZM0e5dJ6tOaL0jAGtgMgH0hhoJe37ch5iuzSRsTkIogD5hMgH0BgmLOpWEzU0IBdAnTCaA3lA8Ya2upRa3FzFdm11eEjYHIRRAnzCZAHpD2YT9yzfDtTcWNI8hNKJNriUSNgchFECfMJkAekPZhN1xYrhq6Emz24uYrmedC1sOD6vzNAD9QCiAPmEyAfSGsgn72ZlrX1y62+T2nkNMS5f3SN+jXdUkbM5BKIA+YTIB9IayCXv6wuAnljHr2JL2SYSG0upaKmmYOmodUudpAPqBUAB9wmQC6A1lE3ZgYGBX9fDhvkeciEXpNrm9VZefbj9x3danwlMA9AWhAPqEyQTQG4onbEev/b1jN2pHXjS5lhClWD+6+NFJZ3PHoApPANAbhALoEyYTQG8onrADAwMnWy5/YhmrdVKxuI5W11L96GJx3eQh6xWlRx/0CaEA+oTJBNAbaiTswMDA8XOX3zt243DfI+vYktWFmMDGscXqq8921IzSr7kMoQD6hMkE0BsqJezAwEBHr31X9XBx3WRF78OGsaXGsSXr2FJjbmvpndR8H7Q1MAMNNxeP2x/vtc78V+X1xku8fyCnIRRAnzCZAHpDvYQNUHluqKjGUWhGx9a/txbt3vWXz+s03xM9uOPE8GHrZX5/CwgF0CdMJoDeUDthIQwHRIB4eF6APmEyAfQGCasZHBAB4uF5AfqEyQTQGySsZnBABIiH5wXoEyYTQG+QsJrBAREgHp4XoE+YTAC9saGE7e7u7odMOXPmdOCAqPWOAOgInhegT5hMAL1BwmoGB0SAeHhegD5hMgH0BgmrGRwQAeLheQH6hMkE0BskrGZwQASIh+cF6BMmE0BvkLCawQERIB6eF6BPmEwAvUHCagYHRIB4eF6APmEyAfQGCasZHBAB4uF5AfqEyQTQGySsZnBABIiH5wXoEyYTQG+QsJrBAREgHp4XoE+YTAC9QcJqBgdEgHh4XoA+YTIB9AYJqxkcEAHi4XkB+oTJBNAbJKxmcEAEiIfnBegTJhNAb5CwmsEBESAenhegT5hMAL1BwmoGB0SAeHhegD5hMgH0BgmrGRwQAeLheQH6hMkE0BskrGZwQASIh+cF6BMmE0BvkLCawQERIB6eF6BPmEwAvUHCagYHRIB4eF6APmEyAfQGCasZHBAB4uF5AfqEyQTQGySsZnBABIiH5wXoEyYTQG+QsJrBAREgHp4XoE+YTAC9QcJqBgdEgHh4XoA+YTIB9AYJqxkcEAHi4XkB+oTJBNAbJKxmcEAEiIfnBegTJhNAb5CwmsEBESAenhegT5hMAL1BwmoGB0SAeHhegD5hMgH0BgmrGRwQAeLheQH6hMkE0BskrGZwQASIh+cF6BMmE0BvbDRh+yBTAgfEqhOVWu8IgI7geQH6hMkE0Bs9PT0krDZwQASIh+cF6BMmE0BvkLCawQERIB6eF6BPmEwAvUHCagYHxCygpWPgUOPQxyeHPz45/HaFo9CMG3Xb/zQV7d71/mc1mu+J/g0M3he1l5suDTDzSstkJlOTOQToI2E1hIQ1Oub6yx9Ujuy1zhwd+P7Utflmt/fS5HL7FG7IS+OLx+ouNV9/qPme6Nzz475T16V0WEwAACAASURBVOYrBx9/3nr7gxPOfd9e6+zpZ+aVk8lMqCZzCBCAhFWV1tbWqhOVAc3lXxbt3vW/X/w9vOTcuXNa7yBIoqVjYPuJ4QPnZhpvLnXPrgzcWh28/RJRE3tmV5rd3i877n5Qeb3+olKnwZh5TK06cwgQDQmrKtXVJ4uLdhft3pXQg198ofUOwvo0XRp479iN4/bHrRO+gVvav3Ig2m+9vDS5bHHMf3TSefainZlHTVR6DgFiIGFVpbenZ29pScJ+NZUUt7a2ar2DsA49vX3bTwxXXX7aOe3X/AUDMVrb3OqZG8/fO3Zd3p/kMvOYlgrNIUA8JKzaVFefLC0uikvYv3EK1hAcrLv6WbPnwoRP89cJxHg7Zvxfdtzd9+01Zh41VIk5BIiHhFWbhCdiOQVrCFo6Bj6oHGm8ucjPUlG3tri9O2puyvVjXGYeM1PeOQRICAmrAXEnYjkFawy+PHv5s5ZbXTMr9lsvMTMFQVBnI4F1ZLk7Y2mbXTnYcW/ft1dzduYV+qaHNyusJeMdyO7hlHcOARJCwmpAzIlYTsEahY9PDh+3fz8wp/3Lg3LGv6ymeKGNuSrhl8J6SFxH+l7F3Lvm/6TqWzey8JdvhnNn5iUObYqpi18nxb3ErC9xl+yKPRd0q4xzCJAQElYbqqtPlhTt4RSssfjLN8P1zheavzAoqsQaSHiV9C9TvxJn/PKfejXN/21Vs21yudDsyKmZl/L9FdY2qBCXpKlHNNmMJVyYevw2+FwwijLOIUBCSFht6O3pCbyXoKRoD6dgjcLbFY7Wca/mLwyKKvGVO+G18V8mvCrZknXbVMpuS9mfrLdz2i9XOhhr5lO3Y8YJK2Wb0vcw4R2l9VwwijLOIUBCSFjN+Oqr8qLduz7dv1/rHQGpFJodbZPLmr8wKGqyhE12Gkl6FqSIiWTXJtwfifufywnbNbMiVzoYdOYTfrulzEbCaY+/eYqsTDG9Kj8XNFfGOQRIiNoJm7Ofrx3vu2WNRbt3fXjgmOZ7oq0G+nztQrPj0pTxXs7TUvaElX6/Us48ZbaCEc9gbUR5E1b/M5+6I+MXpk7YjRSkxD1ZdyPZMcOaJyy9YQg30gCqJmwuf752vHzidrvRPl+70Agv5xs0s4SNf6WPz4J103Pdy9L3Nn43DPfyvxFzLWHtKd94HV6SGnuiaUlYt8kmWdvngg7VNmHpDUO4wQZQKWH5fG1MrSE+X9soL+cbMd2EtSc6cZWiLJMtSd0WEnfVTsLeemnPyYQNmHp+1p2NZGO8bmjG70aKFZR4LuhTrRKW3jCimTWAGgkb+XztcV+/vv84C2rowNzLNn1/vnbg5Xzg1svsVhCE+MvRC5Otk2JJWjdJdvPUSFwnF+yUO2E1f0TpmnoCw9OScHn4crKZjxk26TuQ8NoMngtGUcY5lE6kNyZ8A3weh6G033p5Kc0GUDxhoz9fW/NIQv3b69Hv52sb9OU8AxO+PCdrQYkJm2yz8beS8rK9kUTIenMwYdedyQEJCTsQN6IJBynm5snuaN0Rleu5oFvVT1h6IwtMqwEUT9jA52sH/n8IUYrt0zr9fG2jvJzr0JhX62Qv3tLPla4bEBJXzkpzLWElfselJKyUe0lRqFLmXPbngm5VP2HDvaF5h+FG7JDcAMombPjztfs8qwNziFLV5+drF5odlyaXNf/HMZbBV+KUV0XOSEUtX3PSN+5WKbaZ1vKsVMa/x2mgmY8fm+hRiZ+u6C8lbjy8nYTblzjnUtaR+FzQuSr/Xdhwb/B+xSxQYgMom7CBz9funPb3z60iSrdHl5+vbaCXc8xlczNhUW+qnLDB3phZ0fz0M27cXmkNoGzCBj5fu8+jfRLJZqMp8L/C2xo3vKkhyybB9I3mj0iv6vDztXk5R0NIwqIeVDlhA73Rz498FfabnYIgmL6ZWx1oNAlCwd4hpe5ISgMom7B/+Wa4zrnQN7eqoKGmFIQC09Bq35Blk2A6Er425ssYw9fGrdZoLgj/4GZbY3h537bAvcytHtkpbDLPRW0nuDxw28hVKYzftyHLpqgfGEXdr6wmf9S68uKET8O/KZiQQrOjbXJZ87hHTK28CcvMY2aqnLB/+Wa43rmg4CNqNAmCsMk8l3SF6NNS8p6iiuqcvUOBja8h6Tm1hLu0kX2LuW2jSci3WJX5B5fSAMom7NsVjvPjXsVzJzrF0krYJKs1mguENRsM1WTUao3mAiHf0hhZP1KcR3ZKq8/ECRta0mgSlO5LfSds+9QyCYuYgSQs6kGVEzbQG8o9nG92Ctt2piw2RX+ymlkfJ1xzA/v5zc6YXJ7bmy/HD6UTKaUBlE3YQrPjwoTPNreqrEOWTYLpcPzl6C+HLJsEkyl0bnVbY/S1c6b88P/MmA6HTrWGt99gLhDyLQ3Rq+VbGqLu6PDOApPZJOzss82t2ubmTPnROxPebOQeA7uxzRzewpwpXxB29q3d+ejd6NuWaDvbdkZOP9uS3WNg/8O7nfRRr7O3kX+0uVVboym4KSXtUPfwJwVeztEQkrCoB1VO2EKz4+KET7GH07dNMH0z17ctcB40sjB8HnRub9RL6jexxRlaHlli2hv12prwTq3mgshJ33UTNsE2E+5S9MKCTdEBGjylOrc3P/oxxv8jrF3YaBJ29mk1PxtK2K6uLltKCs2Oi5O+Xs+Ksg5aNgmmQ/GXo78ctGwShE1mT69npbfBJORb6mOvTbKFZKt5bFuFgtLBwAXToUHLpvA2Axc8ntJ8YWvDSq9npd5cIOy09cbsRnBrntL8mCWhm8Rtp3fQsilqO5GNp77H4LUrh3aufRRrHs56e9tgCi70rBzaGdofJW2f9heaHakHTGV4OUdD2Cnfc4eZx4yVcQ6lz6pSPxhsNAk7+/rWvIdwzpQvrHnTYOIfCM+Z8oM/mG00FwQ2EvjpbvC2jabwT3TDBn60K2HjMT9WjdtmwlvF/Lw3sEtrfoAcOMMVeXtk5B8hblf7hiyb4hfKYYeE+cmphI1bJ+G14cBds5GC0sHYjR/aKWwye0JZ6SnNLygdjEq91PcYurx1Z6gRQ8kY/n+mRI/ItlXKw0naqRLWT3rb0F1HLpCwiHqUhEU9mE0JG8m7hHWYojKlLwxnYky8Jt54NGne0Zp77NsWvBy+EDYuZKN6N8r4G5KwGias1LOwobOVDaZAg9abC7Y2RJ2hXJPCoVO2sXckCIIQPrsZubbBJARP8QYurxnWpHGZ8B4D+ykIQuzZ3xThnmhvQ8leby6INDcJi6g/SVjUg1mUsJHf5I789nb8KcmEvbhmtdB2kp+vTdSIyTe+8YAOnVdO/mvoUSebczBhL0z4emZXlNVuyRNMX8dfjv4y4ToJr521bRUKSuyR7deVFwj5lrokG9+6Q9jasNIzu9LTYMort5Xkh26b+h4jlz0l+aEtRF2b9E5TPOQU/w7Rj2vd9RP/s6z02C15+aat+Wv+cZTz0hQJi5iJJCzqwexJ2Li/ALDJPKf1WVjZErZvyLIp37QtP+5tAxLPwmb3GwnUTthZT0m+kFfuCVz19Q5B2GGTkGhrsrWuvEBYs3KCxAxFoSBEt29+QV6gO0N7ErhhXXlBqt2Ij8s1DyT6EXlKdsR2beQxJrzHBlNw52dtW1M96vX2NrSOEHmAJCyiHiVhUQ+qn7AXJ5eV+N3iBnPBJvNcwt/wjl6+5pewI7+cHXwvbPCGgV/7TvE76FG/hL1m4+vdJMkKCXcp5nfW50z5wtpf0Y7E69p/ir5t8ffbGP5ddkV+pTv1N12NhO2e8StoXWn4d+tK7IGFti3h/1d6raYusJq9Jk8o/TrmctTCr3cEbhD8sq488ndht9SF7it6I+Fbhe9iZrbkNUHYYYvsm70mT1iz2cS7EXwUBSV1a7dvr8kThLzy2ahHFHqMkS1H70Cie4z61wg+kGSPOvXehtaP/Gso7KXJZX0mrCL/l48on1IO/cw8Kq2McyhxVi9O+myeFbn1mPILTINRSwYtm4QC02DgQpBtDSs2z8rh4J8JMh0etGwSTIcj64eWR5YkurzWBnPBJrPH5lmxNUT9/fu19xu59yTbTLhLkYWhLwP7n/jxRrl2zcDKMUtkUxcJ2zrh65rxo8zaa/KE0gq179e2RcU7bSNhETOShEU9qEnCqvB7GllnOr+iHfPLQvG//i6fUn4fhoQ1plok7NnyAmGHTbW7S52w9fV1TU1NmRznNgAv52gISVjUgySsIYz8GU1pHtopCPG/d66A+kjYcV/ntB8xXS8mSdj6+rpP9+8rKdr9VXl55ke7jODlHA0hCYt6kITFjUjCooGNT9hAvO4tKSnavWvP7l0kLGJCSVjUg+onrBq/Po5qKeVXuklY1KnRCRsdrwFJWMRkkrCoB0lY3Ii6SNjz476OaT9iul6cXH7ni/aqqhP795aaiovD8RpO2P/9xz+a1OWdf7Txco76t4OERR0o4xxKnFUSNpvUS8K2T/sR0/VM30TR7t0x5RqdsMVJrlLUqha7Vq8HLTcXD3Xf//jb8Y+/HX+7YrjQ7ECDGvgmfnHhu6aRBZ2nQ2FGCcusZo0bmVUSFjciCYsGttW9+F+fVpZ9+mlJ0Z49iRK27NNPq05Uqun7n9WcG36oSb+aO+5+UDW2t8lzdOD7U9fmm93eS5PL7VNoPM+P+05dm68cfPx56+0Pqsb2WWc7p2Q+zaltwjKrWeMGZ1WThO2eXcHsUBcJ2zLuvTS1jJiuFyZ8gfFta2v7qry8tLhoz9qE1eS9sAp9+ksKm28ubq9xH2iea7y51D27MnBrdfD2S8wCe2ZXmt3eLzvvfXByrO76c5U/1UaJmWdWs9XMZlWbhFXlk3dQBaV8vBEJizo1nLABYkI2RxLWOrLwXuXN4/bHreO+/rmX9luYVQ7MvWybXLY45j+qcdU65g2dsMxqdpvBrKqfsPwd+mxSyscbqZGwbVPLiOnaujZhA4RDtigHErZ7ZmV7javq8tOOaf/ArZeYrfZ4Vs/ceP5e5c2OKXmmS/2EZVZzxLRmlYTFjaiPhHV72yaXEdM1YcIGCIRs5fFjGR7qMqVQqc/gTuzBtjufnb/VOu7tn1vF7LZ92v9l57191hnVPltc3plnVnNH6bNKwuJGbNNDwja7vRcnlxHT9XzyhNUKNRO2efTFB1VjjTcXbR7tX7RQBVvc3h0Wd63jmeESllnNNSXOqgYJy9+hzyIvkrBoXHWbsOp8tl7gtFbHtF+TP4CA6ts9u3Kw494+64w6H8wo48wzq7mmxFmVcQ4lzioJm01e1EnCXpjwIabr+fGcTtiPvx0/bv++16PS+25RD54dWfjLMafhEjZ3Z3XIskkwHdbtnSq5e1JmlYTFjahGwvamhITFjA0kbOoBUxk1E/Yvx5x1IwvqvGlBkoOWTYLpsEIbHLRsEtawrUHirUyHky00oBcmfIVmh1wJq9rMKzura2cj6WBIGTPpVyWxwVwQ2ZWdNm2GTfqdKrl7UmZVxjmUOKt8Gmg2GUjY1N/07u5uZRP2nNvbOuFDTNeW3E7YtyuGW9xede5LGwctmwTTofjL0m+VeqEBvTS1bMSEVXZWo7+5DSZBxm90mmNTby6IundPab7pkCaDt8Eni0xKmVUSFjeiPhLW5W0d9yGma4s7pxM28Nu1mn/EX0S7JU8wfR26UFIePB21tSG4Ql1oiZBvqQveyrY1uMj0ddRGwrcVwteGNx53j2vvyFOSH3+rhAuT7EDi/dSLgU+j2fjwqJywys5q7De0oMSe9JsbtTC0POrma7/1a8dmvXHd2mDbGjXtyUc0ZkpDe5vkWZNgh6U/tPTW1GBWSVjciHpJ2PPjPsR0bc75hL2g34QV8so9PbMrPQ2mYAjaLXmhIvx6R+BV01OSH3qptlvydth6Ym4bnSZJEzbRHcXfKvGmkuxA7H7qSOMmrIKzGtOgwW9fom9uzMKY2Yj/1q+ZunTGNfWIRhnZ4cRrJtrh5A8tbk+kr6nNrGqSsJp/NDrK5QUSFo0rCXtBVx+WaK/JE0q/jr6QbGHMVTP+7hnblhS3DV6ORtodpbFLiXZAfwY+UNGgCavk4K0djLSmS+KIrrvBulLhtZq6BPuWcAvpP2ukz20Ga6o+q3U9TuvglIxzKHFWz5OwWaQuEtbqWmpxexHTtdnlzfGEbdXVn+m21+QJpRXRF9ZePhv6IWle+WzXjL+rrlRYW6Upbrvmcvw9rnvvCRcm3IH4/dSTbYZNWAVndc03tKDY7k86XXWlwms1Z5PPRuy3Pnps0hrX1CMavCxhUwl3WPpDk76mirNa1+P89PP/KSkq+urYKRnnUOKskrDZpPYJ+5cjw7U3FjSPITSiTa4lElbzqErwar3O67ptS6Az0n7Jlzth13n9Du2n5v+wUZKwqQYv0KCBPks2MCkTNtWIrjuBM7YtgrClTuKIhkZr3RGVtMMbXlOVWQ3E697SvUW7d+3ZvUuThG0Z916aWsbsMPhXL1KibMJur3RUDT1pdnsR0/Wsc2HL4WH5jm8yoOb7U3X3Nw4HavKE0q+iL0RfrivdUhdY07YleO1s8WtCXvlsZ+Dy9pramNtO27YIBcUDa7eT8B7XXE54q4QLE+1Agv3UkYFfX5DtfYpqzbyys7pmNsLf00Tf3OlgZXZO+zvrSoWYcU3wrY8am/XH1V9bXiCs2ZPSrxKOaNTCyE2SDnPcDq/30KJ2Q/qays7q2ah4DRhIWBnnUOKskrDZpPYJe+D0lS8u3W1ye88hpqXLe6Tv0d9O6u4srJoJe15Xv107UJMnlJqjL6y5bHsn9OPMd+rCtwovLCgaiFnf3zHtN28P/gDUPBDzXljhnbpkdxRzq1QLE+xA4v3Ui8ZNWAVnde3MdAzU5AlCXvlsom+uvyP8s/XXCuLGNcG3PjI2Esa1Y9p/JuqPaeSVz643okLe9tKUz5pEO5x4biNrRraZ3pryz+o7X7RXNnbu2/9paUlpOF7DCfvFV0fP9k++8482q1q88482Ejab1D5hLS39n1jGrGNL2icRGkqra6mkYepIg12Wl2G5UD9hNX83EqrpBSMnrOb/emusKxW227Tfjezd4TN9E0W7d8eUa3TCFie5SlGPN/e3TS1jdtiqecL29vb+7aTjcN8jTsSidJvc3qrLT7efGO7qluVVWDZIWFRUEnaDlodOfwpCabnWO5OVOxy21b34X59Wfv73gyVFRXsSJeznfz94rO7S+5/VnKg8ro7vf1ZTf+1+2+QyZoe6SNiLnbb3jl2vHXnR5FpClGL96OJHVc7Gi32yvAbLiMoJyw/Fcs3AD86MmLDMaq4ZntWLzkdfHTtVWlK6Z23CavJe2Ga39+LkMmaH5/WQsL29vSea7J9YxmqdVCyuo9W1VD+6WFQ3UdEwJMcxTWbUT1jNf5SDatpq5ITV/F8P1TRmVmNCloTFjauXhO3t7T1qtb937PrhvkfWsSWrCzGBjWOL1Vef7age1We/9qqfsG6v5j/KQTU1cMIyqzlmwlkNh2wRCYsbVvGE7ezs7JHMhY7ev510FNVNVPQ+bBhbahxbso4tNWJuG5iBhpuLx+2P91pnPjg+fLa1T/pQqYzKCcvhONc8L2vCqjbzzGoOmmJWAyF7/OwFGedQ4qwyh9lkcMZS0tXVpVLCBjjaOLCn+lqh2YEY7fZKR0W9vbMr06OXKhQGPkhzdkUFC82OZrf3woQPc8fz475Cs2PjwyN7wjKrGKOUWdUkYTX/l0G5DMxY6m+62gkLYFxIWFRUEhaNIgmLSkvCAsiJygnb5PK2jvswd2xxew2asMxqrillVklY3IgkLICcBF/OZ/wq+O4xZ+2NhfPjPswdz7m8hWbHxofnUuDvy6o188xqDiplVmWcQ4mzes7tbZ3wYXbYQsICyIiaCbu9xlU19KTF7cXcsc65sOXIiOESllnNQaXMqgYJy08DssgWNwkLIB9qJuz+c54vLt1t1vqFCtXT5T3S9+hvpycMl7DMas4pbVY1SVjNz0+jXDaTsAAyUmh2tE74umb8Klh9+cknpyasY0vNbi/mglbXUknjzKHu+xsfnjZZE3bdmWdWc02JsyrjHEqcVRI2myRhAeREzYTtmvH/7fTE4b5HTW7vOcx2m9zeqstPP6pxtU8tGy5hmdWcUvqskrC4EUlYADlROWHPu5feq7xZO/KCMshyXd6G0cWPql3115/LMjnqJyyzmiumM6skLG5EEhZATlRO2K4Z//H+R5+cmqh1vmhyLWFWanUt1Y8uFtVPmzvvyjU26icss5oLpjur6idsk2tJ+zcKo0w2u70kLIBsqJ+wXTP+I70P36u8ebjvkXVsyerCrLJxbLH66rMdp9wy9qtWCcusZrcZzCoJixuRhAWQE00StmvGf9699LfTE0X10xW9DxvGlhrHlqxjS41oTAPfu4abi8ftj/c2eT6oGjvjeCbvwGiVsMxqlrnBWSVhcSOSsAByolXCBvym9+Hu2slCswOzw+01rq8678ny+1v6SVhmNSvNbFY1SVjN/1wDyuU5EhZARgo1TVhEiWqesIhdJCxuTBIWQE4KzY7WcV/ntB9Rz16UN2GZecxIGedQ4qxaXUva/9EGlMkmFwkLIB+8nKMhJGFRD6qcsO8eGT5zY0Hz8EK5tLqWSFgA2eDlHA0hCYt6UOWE3V7pqBp6onl4oVyedS5sOTyc+ptOwgJIhZdzNIQkLOpBlRP2wLdXvrh016r1X89FuTzS9+hvJzkLCyATvJyjISRhUQ+qnLCWlv5PLGPWMe3bCzdu49hSScPU4fqB1N90EhZAKrycoyEkYVEPqpywPT09fzvpONz3qMnl1bzAcCNaXUtVl59uPzHc2bXOd3yjCdsNkDPwco6GMJAOzDxqq4xzKJHW9p73jl2vHeFTjo1t/ejiR1XOhgu2db/jJCyAVHg5R0NIwqIeVD9hu7u7j1sHPrGM1TpfaP6RvJiZ9aOLRXUTX9UPSvl2k7AAUik0O86P+zqm/Yh6Vt6EZeYxMzVJ2O7u7m8aBt47dv1w3yPr2BIayMabi9VXn+2oHpXYr90kLIB0eDlHQ0jCoh7UKmG7u7tb23v+VnWtqG6iovdhw9hSY6CQUH8Gvi8NNxeP2x/vtc58cHy49vz67x8IQ8ICSEXbl/OGkQVz572dp8Z3nhp/u2JY849Nx4wNfBP/p/X22eHnOk+HwoxmnlnNGjcyqxombIBvGvr3VF/T/N8Qpbi90vFV3UBHmlFJwgJIpVC7hD146c77VWN7mzxHB74/dW2+2e29NLncPoXG8/y479S1+crBx5+33n6/aszUONPq9mZTwjKrWeMGZ1XzhIWsh4QFkIomCdswsvBRjWt/81zjzaXu2ZWBW6uDt19iFtgzu9Ls9h7suPdB1djpa8+yIGGZ1Ww1s1klYUFpSFgAqaifsGeHn/+18uZx++PWcV//3Ev7LcwqB+Zetk0uWxzzH1a7LFeeGjphmdXsNoNZJWFBaUhYAKkEXs7bp/3q2Da5/FGNq+ry045p/8Ctl5it9nhWz9x4/tfK0fNuryyTc0HuhGVWMWBasyrjHAIkhIQFkIrKCfuPi9991nKrddzbP7eK2W37tP9gx73SxhmDJiyzmjtKn1USFpSGhAWQipoJWz+y8H7VWOPNRZtH+xctVMEWt3e7xW258tRwCcus5poSZ5WEBaUhYQGkombC/uPid5+23OqY9vfNrWIu2D27IteJWJUTllnNNSXOKgkLSkPCAkhFzYTdeWr8uP37Xs+qbc5oDlk2CabDmu+GAT07svDuUafhEtbAs4qZKmVWSVhQGhIWQCpqJuy7R511Iws2z4rxHLRsEkyHM7s2uMIatjVI2FT4csKFBvHChK/Q7DBcwhp4VkM2mAsiA7fTptQdJZxSYyplVklYUBoSFkAqaibs2xXDLW5vr2fFeA5aNgmmQ5ldK2WF1GtKv7n+vDS1bMSENfCselZ6PSv15gIhMjOe0nzl58fIUxpQyqySsKA0JCyAVNRM2EKzo3XC1zO7oqV2S55g+jrmst2SJ5i27gicsCoosYfXt22NnMgK3MpTkh9eElgzeklgnfCt4u4obk9KyoOnyrY2xG0qeKuEC2N2L7LxutAGhXxLnbb/1LMrPbMrl6b8RkxYXcxq5tq2BicqfuQSTGb0ENatGUipK8ROqfb/ApkoZVZJWFAaEhZAKoVmR8u499LUsgoWmh0XNM+CpAkbfEmuKy8IxZ+nJF/IK/fE3ipkZM0113pK8qNe3XfYkt08cKfB7TeYEmxqbWHH1XCSOwqV69c7dFESgSzY+PAEfsir2szrYlYzNuG8RQ1MXXmBEJnMqCFMPJDrrhA3pcZUyqzKOIcACSFhAaSifsJ2z/i11F6TJ5R+HXNZ+sKEm0q6pm1LZIVo0rzTdReuuaO4/dTUS5PLxk1Yzf/1MrSuVHitpi5mYVpDnsEK+pu9dJUyqyQsKA0JCyAVlRO2dcLXNePXUntNnlBaEXM5euGMbUvgcl2p8FrN2cS3isRo7M3rSoW1tRq3fcl7knphwjua8Z8N/Zw3r3xW43/qGX/XjL/NsAmr/axmbMJ5i57nGdsWoaDYnmS01p29hCskvFNDKWVWSVhQGhIWQCokbKpwjE9Ye01e4LVfyst8wjvNbE/Wye54Q41ihCwgYeXWtkUQttRlOm+ZrUDCAsgBCQsgFbUTdtzXOe3XVNsWoaB4wN857f9quyAIpV9N+zsHavICFwILt9tCawpb6vyd0/7a8oL4NSMLo7bZOT1b/JqQVz4bvLy9pnbtrSJGL4xcjtrUOgsT3VFdaWCHO6dtW+LvUQsvGjdhtZ/VzI0azsColH41PVv8WtQ8B4Y88RBGXU5jhehngSGVMqskLCgNCQsgFZUT9vy4r2Par61nQj9qf6e8Jk8oNU/7Owai3hvwWs2Z8MqhH9bnbS8NrjntN28Xki8MfGl7J7hKQdGAvyNm+4G7zxx9swAAEhFJREFUrgssDN48+nJkU+stTHBHkSXCO3Ua/zsHNG7C6mFWZZnzwLtK1s5hgsFLfDmdFdY+C4wnCQt6gIQFkIr6CavOH/BKz4Ga/08oLdd8N7LRC0ZOWM3/9VBNpcwqCQtKQ8ICSIWEbZ8mYRWUhEWjSMKCHiBhAaSicsKqdl+oEwMv+XJtR7WZZ1ZzUCmzSsKC0pCwAFIJvFS3TS2roJr3hTqxdcJXaHbItR3VZp5ZzUGlzKqMcwiQEBIWQCpqJ6zb2za5jLmjgROWWc0xSVjQAxtK2I6Oji6AnEHlhG12ey9OLmPueF7WhFVt5pnVHFTKrMo4hwAJ6ezsJGEBJKHm2aZAFlyY8GHueH7cV2h2yHWGTLWZZ1ZzUCmzSsKC0pCwAFIhYVFRSVg0iiQs6AESFkAqav7AtNDsaHJ5W8d9mDu2uL2FZodcP+RVbeaZ1RxUyqzKOIcACSFhAaSiZsK+e9RZe2Ph/LgPc8dzLkMmLLOag0qZVRIWlIaEBZCKmgn7UbWrauhJi9uLuWOdc2HLkRHDJSyzmoNKmVUSFpSGhAWQipoJu7dp9otLd5u1fqFC9XR5j/Q9+uTbCcMlLLOac0qbVRIWlIaEBZCKmglbaX/88alx69hSs9uLuaDVtVTSOPNV533DJSyzmmtKnFUSFpSGhAWQisp///KTbycO9z1qcnvPYbbb5PZWXX76YbWrddxnuIRlVnNK6bNKwoLSkLAAUlE5Ya03F/9aebN25AVlkOW6vA2jix9Wu0475mWZHPUTllnNFdOZVRIWlIaEBZCK+p9CdMT28ONT47XOF02uJcxKra6l+tHFovrpg+135Rob9ROWWc0F051VEhaUhoQFkIomH6T5dfeDv1bePNz3yDq2ZHVhVtk4tlh99dl2i1vGftUqYZnV7DaDWSVhQWlIWACpaPUpRI2jLz75dqKofrqi92HD2FLj2JJ1bKkRjWnge9dwc/G4/fHeJs/7VWM1l58q8clJmsw8s5pNbnBWZZxDgISQsABS0faDNCu67//tzGSh2YHZ4YfVroPtd88rMFEaJiyzmpVmNqskLCgNCQsglUI+Cx6NoOYJi3iBhAXlIWEBpMLLORpCEhb1IAkLSkPCAkiFl3M0hCQs6kESFpSGhAWQCi/naAhJWNSDJCwoDQkLIBVeztEQkrCoB0lYUBoSFkAqvJyjISRhUQ+SsKA0JCyAVArNjnNub+uED1HPtsiasMw8ZqaMcwiQEBIWQCq8nKMhJGFRD5KwoDQkLIBUeDlHQ0jCoh4kYUFpSFgAqRSaHedc3tZxH6KebXHLmrDMPGakjHMIkBASFkAqvJyjISRhUQ+SsKA0aids44Wer+oGdlY5dlY53q7Q/qOfUXMDw/A/p+31rb1KjLiMFGr6cn7GMf+/l+7usLh3WNxvVwxr/o3DjA18Ez9ruXXq6jOdp0MhCYuZSsKC0qiasF+eHXy/cmSvdebowPenrs03u72XJpfbpzB3PT/uO3VtvnLw8eett9+vHDFZrlxs71Zo1jdO4OX8/LhPff9+4bv3q8b2Nnl47hjdNTNfNVbcMG0dXZR3WprlTlhNZh6NroxzCJAQlRK28ULP9krHgXMzjTeXumdXBm6tDt5+iRi2Z3al2e39suPuB8evn2nR6elYTV7OTzvmP6x27W+e47mTZQZm/mDHvferxk5efqrPdCBhMWNJWFCajSZspwTqzvf89dj14/bHreO+/rmX9luICRyYe9k2uWxxzH9Y5TzV3CtltFRG/ZfzU1ef/bVylOdOthqZ+WrXicEn8qaDQWces0YZ5xAgIR0dHcombHtH10eVw1WXn3ZO+zV/wUD92+tZPXPj+V+PXr9wqUuFJ0BaqPxy3uzyfljtqrr8tGPaP3DrJWarPYGZPz4q1zsKSFjUgyQsKI3iCftF7dBnzbOtEz7NXyfQKLZP+w+23zVZrqjwBEgLlV/Oy1pvf9Zyq3Xc2z+3itlt+7T/YMe94oZpvaUDCYsZS8KC0iibsI0Xet6vHGm8udjnWR2YQ5Rqi9u7vXpUb28nUPPl/LRj/v2qscabizaP9oGFKtji9m63uGV5OwEJi3qQhAWlUTZhvzhj/7RlrnPar/nLAxrLntmVgx339HYiVs2X87LW25+23OqY9vfNrWIu2D27crDjXnHDjK7SgYTFjCVhQWmUTdidJ64dt3/fx2kkTN+6kYV3jwyr8zSQiJov59st7uP273s9q7Y5PTlk2SSYDmd2La7n2ZGFd486dZUOJCxmLAkLSqNswr57ZLjOuaD56Q01bDQJQQpMQ6t9Q5ZNwhq2NSa54ZBlk2A6EnM5emGuenFCd4e/QrOjybXU4vaq4LtHnXUjCzbPir4ctGwSTIeVuDa4wtpnTYOETYUvJ1xoKC9M+ArNjo0PT7PbK2PCqjbzmGXKOIcACVE2Yd+ucJwf92oeQyqZMEbTulXqhTlm+9Sy3g5/ar6cv10x3OL29npW9OWgZZNgOqTEtVJWSL2m9Jvr1UtTyyQsZo0kLCiNsglbaHZcmPBp/uM5lYz+KWrCn6gOWTYJJpO5IHxe1jY3Z8oPn3IyHQ7eKnphwab8wJqrtrlVW6NJyLc0aP5IVbFj2q+3w5+aL+eFZkfrhK9ndkUf2rZGzo2avo5dGFpit+QlvdZTkh+zhdQ3D2m35AmmkvLgs2ZrQ9ymgrdKuDDJfs6u1IU2KORb6rT/5w16acpPwmLWSMKC0iiesBcnfZqf21DJ6JNASc8SCZvMnl7PSm+DSci31Ce7VfTCBpOw0xbYwqGdwtYGrR+mWrbnfMJe0EvCekryhbxyz9rK9JTkB4JypcduydthS+daKStEJ2zo3htMweKMXjN8OeHCZHcUKtevd8TdIwmr0cxjlknCgtKQsPIZG6PRxIVpwlpNuNBj2xq8HL6QE5KwFyZ83TN+7bXX5AmlX8dcjl44Y9sSszD1talWiCb5rTJbmHBP9OSlSd5IgNkjCQtKQ8LKp6SzsBkk7MqhncIms6feXBA8g5sbkrCtE76uGb/21pUKr9WcDVy21+QJpRWBhWtzs0L6tVJWCBu9MHxZ+sKEdzTjPxt6I0Fe+az2/8Ih20hYzCJJWFAaNd4Lq/mP51Qy8c8x11th3YWBL/NNW/MLSuxaP0YVDfxQVZ2ngURyNGHtNXnxCZs6N6XHaLIV5ErYhNuMaNsiFBTbtf4XDknCYjZJwoLSkLDymVnCztq2CqE2TbhwdiX4+yt6+r0TFSRhW8d9ndN+HWjbIghb6vyd0/7a8gJBKP1q2t85PVv8mpBXPtsZuLy9pnba3zlQk5fi2mnbFqGgeMDfuf7No4xeGLkctal1Fia6o7rSwMPpnLZtib9H7bxIwmIWScKC0qiRsJq/w0wNIz+vLCixx7+rT9hSl/S9gF/vCL3zL+HC0Jdb6rR+jOoaeF+gOk8DiQRezpvdXhUsNDvOj/s6pv26MDTeedtL84RSc3C57Z3QzBcN+Dum/R0DNamunfabtwen2pz05mt4p27tNqMuRza13sJEexJeIrxTp/W/bZSBhN348JyTO2HVmXnMMmWcQ4CEKJ6wevlhqLG1bUn1w9DstI2EHfe1T/sxd7xAwmIWScKC0pCwBvBseYGww6b5bqhs6oQ9c+Z0fX293E+HdSBhUVFJWMwmSVhQGuUTVi/v50ODeTFJwp45c/rAvr0le3abv/xSmSdFqnlWM2Fbxr2XppYxdwx8wKyu0oGExYwlYUFpSFjUqfEJG4hXU0lx0e5de3bvyoWEbZtaxtyxlYTFLJKEBaUhYVGnRidsdLwGzImEdXvbJpcxdyRhMZskYUFpFE9YHf1WNRrKi5PL73zRfvz4sX2m0tLionC8hhP2i7//vV5d3vlHm9W1dM7tVcFAylycXMbc8fyEr9DskGt+ZHmFKDQ7VJt5zD5JWFCUDSVse3t7R0r4lRTM2DN9E0W7d8eUa3TCFie5SlGPNvWrduhvdnsvTPgwdzw/LmfCpj44S4SExY0o1xwCJIOERT3a6l78r08rPz9woGTP7j2JEvbzAweOHzuqpu9/VlN79Z5qh34SNtckYTHLJGFBaZRNWH6rGjPzwoQvcPhraWkpP3iwtLhoz9qELT94UJUnyJp5VvONBE0ub+u4D3PHFreXhMVskoQFpSFhUY+GEzZATMhmfcJuO+qsvbFwftyHueM5FwmLWSUJC0qjeMJq/qdq0Ii2rk3YAOGQLcr2hP2w2lU19ETzTzlHNa1zLrxzZERX6UDC4kYkYUFpFE5Y/jAQZmTChA0QCNmj3xxR4Omwzjyr9nJeap394tLdZq2jCtXT5T3S9+jjbyd0lQ4kLG5EEhaURtmE5Q8DYWaeT56wWqHmy/k3/Y8+PjVuHeNPcuaKVtdSSePMwfa7ukoHEhY3ot6O4ZB9kLCoR3WasGNLTS6V/PjU+OG+R01avwihCja5vVWXn35Y7Wq8uSjL8MiZsCrOPGaZejuGQ/aheMJq/qdq0IieH8/1hK298fyvx0drR15QsVmuy9swuvhhtevk5ad6SwcSFjei3o7hkH2QsKhHSdgm11JF9/2PT43XOl9o/lKECml1LdWPLhbVT/+97Y6MmyVhUQ/q7RgO2YeyCXvO7W2d8CGmawsJ61pqci2Vd9776/HRw32PrGNLVhdmlY1ji9VXn223uOXtVxnTgYTFjai3YzhkHwonLH+eHTOyxU3CBq298fzjU+NF9dMVvQ8bxpYax5asY0uNaEwD37uGm4vH7Y/3Ns2+V3WzcvCxbtOBhMWNqLdjOGQfiies5n8wHI1oMwm71vLOe/99eqLQ7MDs8MNq19/b7sj1+1sKpUMhCYsbUK45BEgGCYt6lIRFzFgSFvWg3o7hkH1sKGFTU2h2WF1L2v/NcDSgzS5vodmx7oypSaHZ0cjLORpBuZ47zDxuRL0dwyH7UDBh3z3iqL2xoHkMoRHV4eHv3SOOMzeea/6qgJha65hszx1mHjNWxjkESIaCCftRpaNq6InmH3uDRvSsc2HLIX0d/j6qdJwYeqL5r7EjpvbsiGzPHWYeM1bGOQRIhoIJu+/U0BeX7vKH2TFtXd4jfY/+u+qaCk8A6QTmWfMXBsTUyvjcYeYxY3V4DIfsQ8GErbL2fFwzZh3jI7YxPa2upZKGqYpamwpPAOkE5rmRv8+KOrZxTM7nDjOPmSnvHAIkQ8GEbW9v/++qa3zOO6Zl4PPiP6p0tF3qUHr60yUwz1aX1zq2hKhDZX/uMPOYgbo9hkOWoWzCNl/s/OvR67UjfEImSrV+dPHDKmdtc5fSo58B4XnW/BUCMV4lnjvMPKarno/hkGUom7Dt7e1HG/o+rhnjc95xXa2Bz4uvm/jy7ICiQ78RgvM88sKq9ec8IUar3HOHmUfp6v8YDtmE4gnb3t5+uK7vr0ev8znvmMLg58VXO/V/7AvPs+avFoiNY0sNNxV/7jDzuK4qzCFADGokbHt7e/PFzv+uulZUN8HnvGPYwAwEPy/eOvPBseFvz3UrNOjywjyjtqr/3GHmMV7jHsMhO1ApYQMcrrPtOnlF808nR735UaWjvLbPcO/9Z55Rc1V+7jDzmFCDHsPB6KiasAAAAAAAG4eEBQAAAACDQcICAAAAgMEgYQEAAADAYJCwAAAAAGAwSFgAAAAAMBgkLAAAAAAYDBIWAAAAAAwGCQsAAAAABiPzhL0EAAAAAKA6JCwAAAAAGAwSFgAAAAAMBgkLAAAAAAaDhAUAAAAA45Fhwt6+fbuzs1PrnQcAAACAXCTDhL17925vb6/WOw8AAAAAOUdHR8etW7cySdj5+fnLly9rvf8AAAAAkHP09fU9ePAgk4T98ccfp6amtN5/AAAAAMg5bt68ubKykknCiqL44MGD/v5+rR8CAAAAAOQQvb29d+7c+fPPPzNM2N9//31ubq6jo0PrBwIAAAAAOUFHR8fs7Owvv/wSn6ZSE1YUxdXV1ampqY6Ojvb2dq0fEQAAAABkMx0dHS6Xy+v1JuzSNBJWFMWVlZW5ubn+/v62tjatHxcAAAAAZCc9PT2zs7PJ+jXthBVF8ffff3/w4IHL5bLb7YH74KQsAAAAAMhCb2+v0+n87rvvXr16laJI007YAC9fvnz48OEcAAAAAIB83L171+/3x//+ljwJCwAAAACgFSQsAAAAABgMEhYAAAAADMb/D3FrV1bwZ7rSAAAAAElFTkSuQmCC" alt="" />

业务中完成的体现

在调试中,集成了select方法,即当添加,更新之后,你把最新数据拿到,并进行下一个业务的操作,这个过程中,拿数据也需要在事务中完成,而之前的设计是不支持这个功能的,可以说是个缺陷,本讲主要是解决了这个问题,在业务层,可以使用嵌套的注入来表示,代码一段如下:

       uow.RegisterChangeded(entity, SqlType.Insert, repository, (newEntity) =>
{
var old = repository.GetModel().FirstOrDefault(o => o.ID == entity.ID);
old.DataCtrlName = "Name|Email";
uow.RegisterChangeded(old, SqlType.Update, repository);
});
uow.Commit();

从上面代码中,我们看到了,在Insert方法里,有一个GetModel(),然后对实体进行赋值后,又调用了Update,这样就形成了一个Insert与update的嵌套,这里是使用了工作单元的嵌套.

对UoW的注册方法的修改

     /// <summary>
/// 注册数据变更实体
/// </summary>
/// <param name="entity">实体类型</param>
/// <param name="type">SQL类型</param>
/// <param name="repository">仓储</param>
/// <param name="action">方法回调</param>
public void RegisterChangeded(
IEntity entity,
SqlType type,
IUnitOfWorkRepository repository,
Action<IEntity> action = null)
{ switch (type)
{
case SqlType.Insert:
insertEntities.Add(entity, new Tuple<IUnitOfWorkRepository, Action<IEntity>>(repository, action));
break;
case SqlType.Update:
updateEntities.Add(entity, new Tuple<IUnitOfWorkRepository, Action<IEntity>>(repository, action));
break;
case SqlType.Delete:
deleteEntities.Add(entity, new Tuple<IUnitOfWorkRepository, Action<IEntity>>(repository, action));
break;
default:
throw new ArgumentException("you enter reference is error.");
}
}

工作单元字典添加委托元素

  private IDictionary<IEntity, Tuple<IUnitOfWorkRepository, Action<IEntity>>> insertEntities;
private IDictionary<IEntity, Tuple<IUnitOfWorkRepository, Action<IEntity>>> updateEntities;
private IDictionary<IEntity, Tuple<IUnitOfWorkRepository, Action<IEntity>>> deleteEntities;

下面是程序运行后的截图,我们可以看到,整个过程是在serializable级别的事务里的,即最高的事务级别!

aaarticlea/png;base64,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" alt="" />

对于知识的总结与研究很重要,有时,我们对一个事物一定要有较真的精神,我经常这样对我儿子说,学英语,一定要较真

感谢各位的阅读!

回到目录

Lind.DDD.UoW~方法回调完成原子化操作的更多相关文章

  1. Lind.DDD.UoW工作单元的实现

    回到目录 工作单元UoW我们几乎在任务一个像样的框架里都可以找到它的足迹,是的,对于大型系统来说,他是很重要的,保持数据一致性,维持事务状态这都是它要为系统实现的功能,而在不同的框架里,实现UoW的机 ...

  2. Lind.DDD.LindAspects方法拦截的介绍

    回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...

  3. JAVA存取对象属性时,如果开程多线程,记得对相关存取方法作原子化操作定义

    最显著的应用当然是银行存款和取款,不要存在存取数字和实际发生不一样的情况. synchronized关键字. class BankAccount { private int balance = 100 ...

  4. CATransaction:原子化操作、批量操作、整体设置、自动添加

    Transactions are CoreAnimation's mechanism for batching multiple layer- tree operations into atomic ...

  5. Lind.DDD敏捷领域驱动框架~介绍

    回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...

  6. Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP

    回到目录 .Net MVC之所以发展的如些之好,一个很重要原因就是它公开了一组AOP的过滤器,即使用这些过滤器可以方便的拦截controller里的action,并注入我们自己的代码逻辑,向全局的异常 ...

  7. Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍

    回到目录 Lind.DDD项目主要面向敏捷,快速开发,领域驱动等,对于它的分层也是能合并的合并,比之前大叔的框架分层更粗糙一些,或者说更大胆一些,在开发人员使用上,可能会感觉更方便了,更益使用了,这就 ...

  8. Lind.DDD.Repositories.Mongo层介绍

    回到目录 之前已经发生了 大叔之前讲过被仓储化了的Mongodb,而在大叔开发了Lind.DDD之后,决定把这个东西再搬到本框架的仓储层来,这也是大势所趋的,毕竟mongodb是最像关系数据库的NoS ...

  9. Lind.DDD.Events领域事件介绍

    回到目录 闲话多说 领域事件大叔感觉是最不好讲的一篇文章,所以拖欠了很久,但最终还是在2015年年前(阴历)把这个知识点讲一下,事件这个东西早在C#1.0时代就有了,那时学起来也是一个费劲,什么是委托 ...

随机推荐

  1. maven pom中的repository节点配置没有起作用

    问题描述 昨天晚上想用spring boot快速搭建一个web开发的项目,就打开spring boot的doc,按照说明开始尝试.没想到出师未捷身先死,第一步就挂了. 以下是spring boot的配 ...

  2. Java集合类的总结

    Java语言的java.until包中提供了一些集合类,这些集合类又被称为容器.说到集合就会想到数组,集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的:数组用来存放基本数据类型,集合从 ...

  3. DataTable转Entity(Emit版)

    public static List<T> ToList<T>(DataTable dt)        {            List<T> list = n ...

  4. kafka 安装出现的几个问题

    1.安装kafka的过程出现两个问题 1)错误: 找不到或无法加载主类 kafka.Kafka 原因:    下载的是源码包,需要编译.可以下载Binary downloads: 2) ERROR I ...

  5. 【最后的抒情】【离NOIP还有9个小时】

    学了NOIP 大概十一个月左右,中途的插班生.从2015年12月底开始学信息竞赛,在寒假的时候还笑着我还有九个月才考试呢,生竞就只有两个月了.没错我是从生物竞赛转过来的.记得当初写申请的时候,写的理由 ...

  6. LINQ系列:LINQ to SQL Transact-SQL函数

    1. CASE WHEN ... THEN ... var expr = from p in context.Products select new { 商品ID = p.ProductID, 商品名 ...

  7. 数据访问模式:Identity Map(标识映射)模式

    1.Identity Map模式简介 Identity Map(标识映射)模式是通过将所有已加载对象放在一个映射中确保所有对象只被加载一次,并且在引用这些对象时使用该映射来查找对象.在处理数据并发访问 ...

  8. 用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90)

    Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢? 答案是通过 Linux Network Namespace 隔离,本节将详细 ...

  9. 升级到Windows10

    1.Windows10的优点 2.需要安装的软件 实用软件: Firefox浏览器 Chrome浏览器 有道云笔记 Adobe Reader Adobe Flash Adobe PhotoShop 编 ...

  10. jQuery UI Datepicker使用介绍

    本博客使用Markdown编辑器编写 在企业级web开发过程中,日历控件和图表控件是使用最多的2中第三方组件.jQuery UI带的Datepicker,日历控件能满足大多数场景开发需要.本文就主要讨 ...