在Java

时间:2017-07-04 06:57:59

标签: java module architecture domain-driven-design

我有一个用Spring编写的逐层布局的应用程序并暴露REST API,所以我有一个名为controller,service,model,dao等的包。

我想重构它,所以它将是逐个功能的,其中每个顶级包都将是具有外观类(将是公共的)的小模块,以及包私有控制器,服务,存储库类。只是为了确保一切都很小而有条理。

按功能分隔它们不是问题,但我应该如何处理实体?

我有一个这样的模型结构:

model

例如:我有一个功能可以处理auditorAssignment对象的添加,删除等。因此,在新的软件包中,将有其他控制器公开此类API,服务,存储库(所有软件包私有)以及另一个模块可以使用的一些公共外观(即获取分配或在需要时添加它们)。我应该怎样处理整个模型 - 实体?它应该放在外面的某个核心吗?或者实体应该在包之间拆分,但是公共(为了让关系起作用)?

1 个答案:

答案 0 :(得分:1)

您应该按bounded contextBC)而不是feature打包(考虑到BC可以有一个或多个features)。然后,您可以使用BC之间的任何integration technics,例如anti-corruption layers

  

我应该如何处理整个模型 - 实体?它应该放在外面的某个核心吗?或者实体应该在包之间拆分,但是公共(为了让关系起作用)?

如果是实体,您可以按每个BC中特定的属性拆分它们,并且它们可以共享相同的IDs,这样您也可以更新共享比例(因为很多情况下实体在不同的BC中有一些共同的属性;例如nickname中的Authorization BC用户Author name中的Colaboration BC<!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version="2.0";n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,"script","https://connect.facebook.net/en_US/fbevents.js"); fbq("init", "##ID##"); // Insert your pixel ID here. fbq("track", "PageView"); fbq("track", "Purchase", {value: ##price##, currency: "USD"}); fbq("track", "Purchase", {value: ##price##, currency: "USD"}); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=##ID##&ev=PageView&noscript=1" /></noscript> <!-- DO NOT MODIFY --> <!-- End Facebook Pixel Code --> 中的相应作者。

P.S。如果您将它们拆分为距离微服务一英寸的距离