Re: Re: Conformist
"Paul Rayner [email protected] [domaindrivendesign]" <[email protected]> Thu, 17 Mar 2016 20:45:45 -0600
| Newsgroups | gmane.comp.programming.domain-driven-design |
|---|---|
| Message-ID | <CAKKp0qg+T1Wrk4c1CHVgkAJH-k5e2RaRVyDandqHiL8P_RJ-Zw@mail.gmail.com> |
--047d7b5d98ebc65028052e49c014 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Tom, Conformist is typically conforming to the upstream domain model without sharing the actual implementation. However, conformist could also include utilizing the upstream implementation, but purely in a client-only relationship (not changing the upstream code) and perhaps only making additive changes. Most teams that start sharing actual code wind up as shared kernel unless they're really careful, but often without applying the guidelines and warnings that go along with that happen, and get themselves in all kinds of difficulties. Paul. On Wed, Mar 16, 2016 at 5:03 PM, [email protected] [domaindrivendesign] <[email protected]> wrote: > > > Tom, > > I agree that there is only little advice on how to implement the concepts > of DDD. Most of the samples one can find are way to simple to be a guidan= ce > for the questions arising from real world implementation problems. > > Let's for a moment assume that you are right. What are the consequences o= f > A directly using entities and domain services of B? How to they align wi= th > some of the more general goals of software architecture and DDD in > particular? > > > If A directly references entities of B, the B developers are no longer > free to change their entities without the risk to break something in A. > That is not only a compile time problem. Usually A starts piling up > assumptions on the behavior of the B entities nobody outside of A is awar= e > of. Changing the behavior of an entity in B could break those assumptions > causing bugs in A that are hard to find because they show up much later. > Choosing this path deliberately could be called =E2=80=9EShared Kernel=E2= =80=9C. Anyway, > only after some time you will probably call it =E2=80=9EBig Ball Of Mud= =E2=80=9C. > > > The idea of bounded contexts is to divide the whole system into several > smaller systems by setting up boundaries between them. There are good > reasons for that explained in the blue book. One that goes for the > developers: It gives you more freedom to change your stuff within the > context without raising the risk to break something outside. But you will > have to respect the boundaries=E2=80=A6 > > > Does that make sense? > > > Rgs, > > > Thomas > >=20 > --047d7b5d98ebc65028052e49c014 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <head> <style type=3D"text/css"> <!-- /* start of attachment style */ .ygrp-photo-title{ clear: both; font-size: smaller; height: 15px; overflow: hidden; text-align: center; width: 75px; } div.ygrp-photo{ background-position: center; background-repeat: no-repeat; background-color: white; border: 1px solid black; height: 62px; width: 62px; } div.photo-title=20 a, div.photo-title a:active, div.photo-title a:hover, div.photo-title a:visited { text-decoration: none;=20 } div.attach-table div.attach-row { clear: both; } div.attach-table div.attach-row div { float: left; /* margin: 2px;*/ } p { clear: both; padding: 15px 0 3px 0; overflow: hidden; } div.ygrp-file { width: 30px; valign: middle; } div.attach-table div.attach-row div div a { text-decoration: none; } div.attach-table div.attach-row div div span { font-weight: normal; } div.ygrp-file-title { font-weight: bold; } /* end of attachment style */ --> </style> </head> <html> <head> <style type=3D"text/css"> <!-- #ygrp-mkp { border: 1px solid #d8d8d8; font-family: Arial; margin: 10px 0; padding: 0 10px; } #ygrp-mkp hr { border: 1px solid #d8d8d8; } #ygrp-mkp #hd { color: #628c2a; font-size: 85%; font-weight: 700; line-height: 122%; margin: 10px 0; } #ygrp-mkp #ads { margin-bottom: 10px; } #ygrp-mkp .ad { padding: 0 0; } #ygrp-mkp .ad p { margin: 0; } #ygrp-mkp .ad a { color: #0000ff; text-decoration: none; } --> </style> </head> <body> <!-- |**|begin egp html banner|**| --> <br><br> <!-- |**|end egp html banner|**| --> <div dir=3D"ltr">Tom,<div><br></div><div>Conformist is typically conforming= to the upstream domain model without sharing the actual implementation. Ho= wever, conformist could also include utilizing the upstream implementation,= but purely in a client-only relationship (not changing the upstream code) = and perhaps only making additive changes. Most teams that start sharing act= ual code wind up as shared kernel unless they're really careful, but of= ten without applying the guidelines and warnings that go along with that ha= ppen, and get themselves in all kinds of difficulties.=C2=A0</div><div clas= s=3D"gmail_extra"><br clear=3D"all"><div><div class=3D"gmail_signature"><di= v dir=3D"ltr"><div class=3D"gmail_signature">Paul.<div><br></div></div></di= v></div></div><div class=3D"gmail_quote">On Wed, Mar 16, 2016 at 5:03 PM, <= a href=3D"mailto:[email protected]">[email protected]</a> [doma= indrivendesign] <span dir=3D"ltr"><<a href=3D"mailto:domaindrivendesign@= yahoogroups.com" target=3D"_blank">[email protected]</a>&g= t;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0= px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);borde= r-left-style:solid;padding-left:1ex"> <u></u> =20 <div style=3D"background-color:rgb(255,255,255)"> <span>=C2=A0</span> <div> <div> <div> =20=20=20=20=20=20 =20=20=20=20=20=20 <p></p><p><span>Tom,</span></p> <p><span>I agree that there is only little advice on how to implement the c= oncepts of DDD. Most of the samples one can find are way to simple to be a = guidance for the questions arising from real world implementation problems.= =C2=A0</span></p> <p><span>Let's for a moment assume that you are right. What are the con= sequences of =C2=A0A directly using entities and domain services of B? How = to they align with some of the more general goals of software architecture = and DDD in particular?</span></p> <p><span></span><br></p> <p><span>If A directly references entities of B, the B developers are no lo= nger free to change their entities without the risk to break something in A= . That is not only a compile time problem. Usually A starts piling up assum= ptions on the behavior of the B entities nobody outside of A is aware of. C= hanging the behavior of an entity in B could break those assumptions causin= g bugs in A that are hard to find because they show up much later. Choosing= this path deliberately could be called =E2=80=9EShared Kernel=E2=80=9C. An= yway, only after some time you will probably call it =E2=80=9EBig Ball Of M= ud=E2=80=9C.</span></p> <p><span></span><br></p> <p><span>The idea of bounded contexts is to divide the whole system into se= veral smaller systems by setting up boundaries between them. There are good= reasons for that explained in the blue book. One that goes for the develop= ers: It gives you more freedom to change your stuff within the context with= out raising the risk to break something outside. But you will have to respe= ct the boundaries=E2=80=A6</span></p> <p><span></span><br></p> <p><span>Does that make sense?</span></p> <p><span></span><br></p> <p><span>Rgs,</span></p> <p><span></span><br></p> <p><span>Thomas</span></p><div><br></div><p></p> </div> =20=20=20=20=20 =20=20=20=20 <div style=3D"color:rgb(255,255,255);min-height:0px"></div> </div> =20=20 </blockquote></div><br></div></div> <!-- |**|begin egp html banner|**| --> <br> <br> <!-- |**|end egp html banner|**| --> <div width=3D"1" style=3D"color: white; clear: both;"/>__._,_.___</div> =20=20=20=20=20=20 =20=20 =20=20=20=20 <div id=3D"fromDMARC" style=3D"clear:both; margin-top: 10px;"> <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; backgroun= d-color:#E3E3E3;"> Posted by: Paul Rayner <[email protected]> <hr= style=3D"height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E= 3E3;"> </div> <!-- Start Recommendations --> <!-- End Recommendations --> <!-- |**|begin egp html banner|**| --> <img src=3D"http://geo.yahoo.com/serv?s=3D97476590/grpId=3D8116923/grpspI= d=3D1705007181/msgId=3D24745/stime=3D1458269187" width=3D"1" height=3D"1"> = <br> <!-- |**|end egp html banner|**| --> =20=20 <!-- |**|begin egp html banner|**| --> <br> =20=20=20 =20=20=20=20=20 =20 <!-- |**|begin egp html banner|**| --> <div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-fam= ily: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;"> <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-tr= ansform: uppercase; "><a href=3D"https://groups.yahoo.com/neo/groups/domain= drivendesign/info;_ylc=3DX3oDMTJlZzd1OGFyBF9TAzk3MzU5NzE0BGdycElkAzgxMTY5Mj= MEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ1ODI2OTE4Nw--"= style=3D"text-decoration: none;">Visit Your Group</a></span> <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in= line;"> <li style=3D"border-right: 1px solid #000; font-weight: 700; di= splay: inline; padding: 0 5px; margin-left: 0;"> <span class=3D"cat"><a href=3D"https://groups.yahoo.com/neo/groups/do= maindrivendesign/members/all;_ylc=3DX3oDMTJmbXRvcnIxBF9TAzk3MzU5NzE0BGdycEl= kAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0NT= gyNjkxODc-" style=3D"text-decoration: none;">New Members</a></span> <span class=3D"ct" style=3D"color: #ff7900;">1</span> </li> </ul> </div> <div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p= x; padding: 0 2px 0 0; clear: both;"> <a href=3D"https://groups.yahoo.com/neo;_ylc=3DX3oDMTJkbHBxNDd1BF9TAzk3ND= c2NTkwBGdycElkAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2dmcARzd= GltZQMxNDU4MjY5MTg3" style=3D"float: left;"><img src=3D"http://l.yimg.com/r= u/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15"= width=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a> <div style=3D"color: #747575; float: right;"> • <a href=3D"https://i= nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio= n: none;">Privacy</a> • <a href=3D"mailto:domaindrivendesign-unsubscri= [email protected]?subject=3DUnsubscribe" style=3D"text-decoration: none;">= Unsubscribe</a> • <a href=3D"https://info.yahoo.com/legal/us/yahoo/uto= s/terms/" style=3D"text-decoration: none;">Terms of Use</a> </div> </div> <!-- |**|end egp html banner|**| --> </div> <!-- ygrp-msg --> =20=20=20 <br> <!-- |**|end egp html banner|**| --> <div style=3D"color: white; clear: both;"/>__,_._,___</div> </body> </html> --047d7b5d98ebc65028052e49c014--