Re: DDD Implementation: Marker interfaces for all classes
"Caleb Cushing [email protected] [domaindrivendesign]" <[email protected]> Mon, 15 Aug 2016 04:00:42 +0000
| Newsgroups | gmane.comp.programming.domain-driven-design |
|---|---|
| Message-ID | <CAAHKNRGPDpR-7JvaE0UgRUV8W=w=2E9sCVSpqX1hsca+DM9bng@mail.gmail.com> |
--001a114f09cc48d3de053a144734 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable if the annotation work with EE in some way, like @Repository adds transactional, and @Entity will be an entity at least probably an aggregate. We do some transaction stuff with @Service. Many of these things prevent you from doing other silly things. Like how do you inject a dependency into an @Entity? you don't, how do you add persistable state to a service, you don't. Ok I can tell you how to do these things, but don't do that, and don't bother saying more than it's possible but a really bad idea so you aren't going to explain it. Point is to make sure the annotations mean something to the frameworks themselves. Ultimate reality though, you can't actually prevent programmers from writing bad code, and sometimes you have to be cautious about sticking to the pattern. We had designs in our system based on understanding of certain patterns, and limited to that. It made for a lot of clunky poorly factored code. Basically people thought services were the be all end all of domain logic. In a few complicated scenarios I showed how to use Strategy to do it better. I a ViewModel layer to pull business logic out of the UI. Point is just using the DDD patterns may also bite you if it's the wrong design. On Sun, Aug 14, 2016 at 10:49 PM Niklas Mehner [email protected] [domaindrivendesign] <[email protected]> wrote: > > > ok, thanks. That answers my question. > > > 2016-08-14 1:18 GMT+02:00 Paul Rayner [email protected] > [domaindrivendesign] <[email protected]>: > >> >> >> To put this in perspective: People in this project are coming from a 4GL >>> background using a tool with very limited set of concepts/capabilities.= The >>> new development platform is JEE. Now they are concerned that there will= be >>> chaotic code structures and want to limit this by only allowing a defin= ed >>> set of building blocks and no classes that do not conform to these buil= ding >>> blocks. >>> >> >> I see this approach as being very problematic. The DDD building block >> patterns are *not* intended to be a complete list of object types for >> domain modeling. They are a set of useful domain modeling patterns that = can >> help get your domain complexity under control by simplifying your domain >> model. >> >> There are other - better - ways to avoid chaotic code structures. >> >> > >=20 > --=20 Caleb Cushing http://xenoterracide.com --001a114f09cc48d3de053a144734 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">if the annotation work with EE in some way, like @Reposito= ry adds transactional, and @Entity will be an entity at least probably an a= ggregate. We do some transaction stuff with @Service. Many of these things = prevent you from doing other silly things. Like how do you inject a depende= ncy into an @Entity? you don't, how do you add persistable state to a s= ervice, you don't. Ok I can tell you how to do these things, but don= 9;t do that, and don't bother saying more than it's possible but a = really bad idea so you aren't going to explain it.<div><br></div><div>P= oint is to make sure the annotations mean something to the frameworks thems= elves.=C2=A0<br><br>Ultimate reality though, you can't actually prevent= programmers from writing bad code, and sometimes you have to be cautious a= bout sticking to the pattern. We had designs in our system based on underst= anding of certain patterns, and limited to that. It made for a lot of clunk= y poorly factored code. Basically people thought services were the be all e= nd all of domain logic. In a few complicated scenarios I showed how to use = Strategy to do it better. I a ViewModel layer to pull business logic out of= the UI. Point is just using the DDD patterns may also bite you if it's= the wrong design.</div></div><br><div class=3D"gmail_quote"><div dir=3D"lt= r">On Sun, Aug 14, 2016 at 10:49 PM Niklas Mehner <a href=3D"mailto:niklas.= [email protected]">[email protected]</a> [domaindrivendesign] <<a h= ref=3D"mailto:[email protected]">domaindrivendesign@yahoog= roups.com</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style= =3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> =20=20=20=20=20=20=20=20 <div> <br><br> <div dir=3D"ltr">ok, thanks. That answers my question.</div></div><div><div= dir=3D"ltr"><br><div><div class=3D"gmail_extra"><br><div class=3D"gmail_qu= ote">2016-08-14 1:18 GMT+02:00 Paul Rayner <a href=3D"mailto:paul@virtual-g= enius.com" target=3D"_blank">[email protected]</a> [domaindrivendesig= n] <span dir=3D"ltr"><<a href=3D"mailto:[email protected]= om" target=3D"_blank">[email protected]</a>></span>:<br= ><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1= px #ccc solid;padding-left:1ex"> <u></u> =20 <div style=3D"background-color:#fff"><span>=C2=A0</span> <br><div><br><div><div><div dir=3D"ltr"><div class=3D"gmail_extra"><div cla= ss=3D"gmail_quote"><span><blockquote class=3D"gmail_quote" style=3D"border-= left:1px #ccc solid"><div style=3D"background-color:#fff"><div><div><div><d= iv dir=3D"ltr"><div>To put this in perspective: People in this project are = coming from a 4GL background using a tool with very limited set of concepts= /capabilities. The new development platform is JEE. Now they are concerned = that there will be chaotic code structures and want to limit this by only a= llowing a defined set of building blocks and no classes that do not conform= to these building blocks. <br></div></div></div></div></div></div></blockq= uote><div><br></div></span><div>I see this approach as being very problemat= ic. The DDD building block patterns are <i>not</i> intended to be a complet= e list of object types for domain modeling. They are a set of useful domain= modeling patterns that can help get your domain complexity under control b= y simplifying your domain model.</div><div><br></div><div>There are other -= better - ways to avoid chaotic code structures.</div><span></span><br></di= v></div></div></div></div></div></div></blockquote></div></div></div></div>= </div><div><div dir=3D"ltr"></div> <br> <br> <div width=3D"1" style=3D"color:white;clear:both"></div> </blockquote></div><div dir=3D"ltr">-- <br></div><div data-smartmail=3D"gma= il_signature"><div dir=3D"ltr">Caleb Cushing<div><br></div><div><a href=3D"= http://xenoterracide.com">http://xenoterracide.com</a></div></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: Caleb Cushing <[email protected]> <= hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background-color:#E= 3E3E3;"> </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=3D24795/stime=3D1471233655" 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=3DX3oDMTJlMnJ1YnBjBF9TAzk3MzU5NzE0BGdycElkAzgxMTY5Mj= MEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ3MTIzMzY1NQ--"= 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=3DX3oDMTJmdmJrdXZtBF9TAzk3MzU5NzE0BGdycEl= kAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0Nz= EyMzM2NTU-" style=3D"text-decoration: none;">New Members</a></span> <span class=3D"ct" style=3D"color: #ff7900;">2</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=3DX3oDMTJkZmxzbzhuBF9TAzk3ND= c2NTkwBGdycElkAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2dmcARzd= GltZQMxNDcxMjMzNjU1" 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> --001a114f09cc48d3de053a144734--