Re: Re: customer facing vs admin/customer service a different bounded context usually?

"Caleb Cushing [email protected] [domaindrivendesign]" <[email protected]> Mon, 30 Mar 2020 14:05:40 -0500
Newsgroups gmane.comp.programming.domain-driven-design
Message-ID <CAAHKNRFwUg64BDWJGJBgSjcGo6ssQfPN9nUmMLdWxfFv4dEq3g@mail.gmail.com>
--00000000000043663805a2172388
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Mon, Mar 30, 2020 at 1:23 PM Christian Johansen [email protected]
[domaindrivendesign] <[email protected]> wrote:

>
>
> Sounds like different bounded contexts to me. I have some questions thoug=
h.
> What is the aggregate here ? Do you have a device aggregate ? OR  is
> Location the aggregate root. Aggregates should not be big. Remember to
> model aggregates around transactional boundaries..
>

In my humble opinion Location is the root, from which which we have a
storefront and a device (it's something like 1 location, has 2 storefronts,
and maybe a dozen devices)


> Who will modify state ?
>

Operations, otherwise it's read only.


> What are the commands and the corresponding domain events ?
>

Good question, I'm pretty new to this part of the logic... I'm not entirely
certain if there are valid domain events in this case, commands AFAIK are
basically your standard CRUD operations, and a few other things, like
disabling a storefront (which results in a CRUD, but still)


>
> You could have different projections of that aggregate?
>

At the very least there is an obvious filter that is always applied to one
context (whether or not the thing is enabled) and it applies at multiple
levels.


> --
> Med Venlig Hilsen/Kind Regards
> Christian Johansen
> Software Developer M.sc.MCPD
>
> MB: (+45) 30 13 15 14
>
>
>
>=20



--=20
Caleb Cushing

http://xenoterracide.com

--00000000000043663805a2172388
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm=
l4/strict.dtd">
<html>
<head>
</head>






=20
<body style=3D"background-color: #fff;">
<span style=3D"display:none">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id=3D"ygrp-mlmsg" style=3D"position:relative;">
  <div id=3D"ygrp-msg" style=3D"z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id=3D"ygrp-text" >
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p><div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmai=
l_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Mon, Mar 30, 2020 at 1:23=
 PM Christian Johansen <a href=3D"mailto:[email protected]">chr.j.jo=
[email protected]</a> [domaindrivendesign] &lt;<a href=3D"mailto:domaindrive=
[email protected]">[email protected]</a>&gt; wrote:<=
br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);">






=20=20=20=20=20=20=20=20




<div>





<br><br>




<div dir=3D"ltr">Sounds like different bounded contexts to me. I have some =
questions though.<div>What=C2=A0is the aggregate here ? Do you have a devic=
e aggregate ? OR=C2=A0 is Location the aggregate=C2=A0root. Aggregates shou=
ld not be big. Remember to model aggregates around transactional boundaries=
...</div></div></div></blockquote><div><br>In my humble opinion Location is =
the root, from which which we have a storefront and a device (it&#39;s some=
thing like 1 location, has 2 storefronts, and maybe a dozen devices)<br>=C2=
=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);"><div><div dir=3D"ltr"><div>Who w=
ill modify state ?</div></div></div></blockquote><div><br></div><div>Operat=
ions, otherwise it&#39;s read only.</div><div>=C2=A0</div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);"><div><div dir=3D"ltr"><div>What are the commands and the c=
orresponding domain events ?</div></div></div></blockquote><div><br></div><=
div>Good question, I&#39;m pretty new to this part of the logic... I&#39;m =
not entirely certain if there are valid domain events in this case, command=
s AFAIK are basically your standard CRUD operations, and a few other things=
, like disabling a storefront (which results in a CRUD, but still)<br>=C2=
=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);"><div><div dir=3D"ltr"><div><br><=
/div><div>You could have different projections of that aggregate?<br></div>=
</div></div></blockquote><div><br></div><div>At the very least there is an =
obvious filter that is always applied to one context (whether or not the th=
ing is enabled) and it applies at multiple levels.</div><div>=C2=A0</div><b=
lockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-le=
ft:1px solid rgb(204,204,204);"><div><div dir=3D"ltr"><div>-- <br><div dir=
=3D"ltr">Med Venlig Hilsen/Kind Regards<br>Christian Johansen<br>Software D=
eveloper M.sc.MCPD<br><br>MB: (&#43;45) 30 13 15 14<br><br></div></div></di=
v>






<br>


<br>




<div width=3D"1" style=3D"color:white;"></div>



</div></blockquote></div><br clear=3D"all"><div><br></div>-- <br><div dir=
=3D"ltr" class=3D"gmail_signature">Caleb Cushing<br><br><a href=3D"http://x=
enoterracide.com" target=3D"_blank">http://xenoterracide.com</a></div></div=
>
</p>

    </div>
=20=20=20=20=20

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style=3D"color: #fff; height: 0;">__._,_.___</div>

=20=20=20=20=20=20=20=20=20=20
=20=20
=20

=20=20=20=20
    <div style=3D"clear:both"> </div>

    <div id=3D"fromDMARC" style=3D"margin-top: 10px;">
        <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background=
-color:#E3E3E3;">
        Posted by: Caleb Cushing &lt;[email protected]&gt;        <hr=
 style=3D"height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E=
3E3;">
     </div>
    <div style=3D"clear:both"> </div>

    <table cellspacing=3D4px style=3D"margin-top: 10px; margin-bottom: 10px=
; color: #2D50FD;">
      <tbody>
        <tr>
          <td style=3D"font-size: 12px; font-family: arial; font-weight: bo=
ld; padding: 7px 5px 5px;"  >
                          <a style=3D"text-decoration: none; color: #2D50FD=
" href=3D"https://groups.yahoo.com/neo/groups/domaindrivendesign/conversati=
ons/messages/24848;_ylc=3DX3oDMTJxaTBlbm1lBF9TAzk3MzU5NzE0BGdycElkAzgxMTY5M=
jMEZ3Jwc3BJZAMxNzA1MDA3MTgxBG1zZ0lkAzI0ODQ4BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUD=
MTU4NTU5NTE0NQ--?act=3Dreply&messageNum=3D24848">Reply via web post</a>
                      </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
            <a href=3D"mailto:[email protected]?subject=3DRe%3A%20%5B=
domaindrivendesign%5D%20Re%3A%20customer%20facing%20vs%20admin%2Fcustomer%2=
0service%20a%20different%20bounded%20context%20usually%3F" style=3D"text-de=
coration: none; color: #2D50FD;">
               Reply to sender            </a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;">
            <a href=3D"mailto:[email protected]?subject=3D=
Re%3A%20%5Bdomaindrivendesign%5D%20Re%3A%20customer%20facing%20vs%20admin%2=
Fcustomer%20service%20a%20different%20bounded%20context%20usually%3F" style=
=3D"text-decoration: none; color: #2D50FD">
              Reply to group            </a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
            <a href=3D"https://groups.yahoo.com/neo/groups/domaindrivendesi=
gn/conversations/newtopic;_ylc=3DX3oDMTJlbmJsNmhoBF9TAzk3MzU5NzE0BGdycElkAz=
gxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTU4NTU5N=
TE0NQ--" style=3D"text-decoration: none; color: #2D50FD">Start a New Topic<=
/a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;color: #2D50FD;" >
                            <a href=3D"https://groups.yahoo.com/neo/groups/=
domaindrivendesign/conversations/topics/24846;_ylc=3DX3oDMTM2dGFvNWttBF9TAz=
k3MzU5NzE0BGdycElkAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBG1zZ0lkAzI0ODQ4BHNlY=
wNmdHIEc2xrA3Z0cGMEc3RpbWUDMTU4NTU5NTE0NQR0cGNJZAMyNDg0Ng--" style=3D"text-=
decoration: none; color: #2D50FD;">Messages in this topic</a>
                (3)
                      </td>
        </tr>
      </tbody>
    </table>

=20=20=20=20=20=20=20=20

<!------- Start Nav Bar ------>
<!-- |**|begin egp html banner|**| -->
<!-- |**|end egp html banner|**| -->




=20

<!-- |**|begin egp html banner|**| -->
<div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-family: Ver=
dana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

    <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-transf=
orm: uppercase; "><a href=3D"https://groups.yahoo.com/neo/groups/domaindriv=
endesign/info;_ylc=3DX3oDMTJlZDNlYzB2BF9TAzk3MzU5NzE0BGdycElkAzgxMTY5MjMEZ3=
Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTU4NTU5NTE0NQ--" sty=
le=3D"text-decoration: none;">Visit Your Group</a></span>

     <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in=
line;">
                                                    </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=3DX3oDMTJkZWcwNWM3BF9TAzk3ND=
c2NTkwBGdycElkAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNTg1NTk1MTQ1" style=3D"float: left;"><img src=3D"https://s.yimg.com/=
ru/0.9.12/min/css/yahoo_en-US_f_pw_101x21.png" height=3D"21" width=3D"101" =
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>
<br>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

=20
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m=
argin:0 0 25px 0; background: #fff;">

<!-- Start Recommendations -->
<div id=3D"ygrp-reco">
     </div>
<!-- End Recommendations -->



  </div>   <!-- |**|end egp html banner|**| -->

  <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div>
</div>

  <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D8116923/grpspI=
d=3D1705007181/msgId=3D24848/stime=3D1585595145" width=3D"1" height=3D"1"> =
<br>

<img src=3D"http://y.analytics.yahoo.com/fpc.pl?ywarid=3D515FB27823A7407E&a=
=3D10001310322279&js=3Dno&resp=3Dimg" width=3D"1" height=3D"1">=20

<div style=3D"color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->

</body>

<!--~-|**|PrettyHtmlStart|**|-~-->
<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;
}
  #ygrp-sponsor #ygrp-lc {
  font-family: Arial;
}

#ygrp-sponsor #ygrp-lc #hd {
  margin: 10px 0px;
  font-weight: 700;
  font-size: 78%;
  line-height: 122%;
}

#ygrp-sponsor #ygrp-lc .ad {
  margin-bottom: 10px;
  padding: 0 0;
}

  #actions {
    font-family: Verdana;
    font-size: 11px;
    padding: 10px 0;
  }

  #activity {
    background-color: #e0ecee;
    float: left;
    font-family: Verdana;
    font-size: 10px;
    padding: 10px;
  }

  #activity span {
    font-weight: 700;
  }

  #activity span:first-child {
    text-transform: uppercase;
  }

  #activity span a {
    color: #5085b6;
    text-decoration: none;
  }

  #activity span span {
    color: #ff7900;
  }

  #activity span .underline {
    text-decoration: underline;
  }

  .attach {
    clear: both;
    display: table;
    font-family: Arial;
    font-size: 12px;
    padding: 10px 0;
    width: 400px;
  }

  .attach div a {
    text-decoration: none;
  }

  .attach img {
    border: none;
    padding-right: 5px;
  }

  .attach label {
    display: block;
    margin-bottom: 5px;
  }

  .attach label a {
    text-decoration: none;
  }
=20=20
  blockquote {
    margin: 0 0 0 4px;
  }

  .bold {
    font-family: Arial;
    font-size: 13px;
    font-weight: 700;
  }

  .bold a {
    text-decoration: none;
  }

  dd.last p a {
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span {
    margin-right: 10px;
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span.yshortcuts {
    margin-right: 0;
  }

  div.attach-table div div a {
    text-decoration: none;
  }

  div.attach-table {
    width: 400px;
  }

  div.file-title a, div.file-title a:active, div.file-title a:hover, div.fi=
le-title a:visited {
    text-decoration: none;
  }

  div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div=
..photo-title a:visited {
    text-decoration: none;
  }

  div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
    font-family: Verdana;
    font-size: 10px;
    font-weight: normal;
  }

  .green {
    color: #628c2a;
  }

  .MsoNormal {
    margin: 0 0 0 0;
  }

  o {
    font-size: 0;
  }

  #photos div {
    float: left;
    width: 72px;
  }

  #photos div div {
    border: 1px solid #666666;
    height: 62px;
    overflow: hidden;
    width: 62px;
  }

  #photos div label {
    color: #666666;
    font-size: 10px;
    overflow: hidden;
    text-align: center;
    white-space: nowrap;
    width: 64px;
  }

  #reco-category {
    font-size: 77%;
  }

  #reco-desc {
    font-size: 77%;
  }

  .replbq {
    margin: 4px;
  }

  #ygrp-actbar div a:first-child {
   /* border-right: 0px solid #000;*/
    margin-right: 2px;
    padding-right: 5px;
  }

  #ygrp-mlmsg {
    font-size: 13px;
    font-family: Arial, helvetica,clean, sans-serif;
    *font-size: small;
    *font: x-small;
  }

  #ygrp-mlmsg table {
    font-size: inherit;
    font: 100%;
  }

  #ygrp-mlmsg select, input, textarea {
    font: 99% Arial, Helvetica, clean, sans-serif;
  }

  #ygrp-mlmsg pre, code {
    font:115% monospace;
    *font-size:100%;
  }

  #ygrp-mlmsg * {
    line-height: 1.22em;
  }

  #ygrp-mlmsg #logo {
    padding-bottom: 10px;
  }


  #ygrp-msg p a {
    font-family: Verdana;
  }

  #ygrp-msg p#attach-count span {
    color: #1E66AE;
    font-weight: 700;
  }

  #ygrp-reco #reco-head {
    color: #ff7900;
    font-weight: 700;
  }

  #ygrp-reco {
    margin-bottom: 20px;
    padding: 0px;
  }

  #ygrp-sponsor #ov li a {
    font-size: 130%;
    text-decoration: none;
  }

  #ygrp-sponsor #ov li {
    font-size: 77%;
    list-style-type: square;
    padding: 6px 0;
  }=20

  #ygrp-sponsor #ov ul {
    margin: 0;
    padding: 0 0 0 8px;
  }

  #ygrp-text {
    font-family: Georgia;
  }

  #ygrp-text p {
    margin: 0 0 1em 0;
  }

  #ygrp-text tt {
    font-size: 120%;
  }

  #ygrp-vital ul li:last-child {
    border-right: none !important;=20
  }=20
  -->
  </style>
</head>

<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->


--00000000000043663805a2172388--