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&#39;t, how do you add persistable state to a s=
ervice, you don&#39;t. Ok I can tell you how to do these things, but don&#3=
9;t do that, and don&#39;t bother saying more than it&#39;s possible but a =
really bad idea so you aren&#39;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&#39;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&#39;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] &lt;<a h=
ref=3D"mailto:[email protected]">domaindrivendesign@yahoog=
roups.com</a>&gt; 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">&lt;<a href=3D"mailto:[email protected]=
om" target=3D"_blank">[email protected]</a>&gt;</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 &lt;[email protected]&gt;         <=
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;"> &bull; <a href=3D"https://i=
nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio=
n: none;">Privacy</a> &bull; <a href=3D"mailto:domaindrivendesign-unsubscri=
[email protected]?subject=3DUnsubscribe" style=3D"text-decoration: none;">=
Unsubscribe</a> &bull; <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--