我有一个用Spring编写的逐层布局的应用程序并暴露REST API,所以我有一个名为controller,service,model,dao等的包。
我想重构它,所以它将是逐个功能的,其中每个顶级包都将是具有外观类(将是公共的)的小模块,以及包私有控制器,服务,存储库类。只是为了确保一切都很小而有条理。
按功能分隔它们不是问题,但我应该如何处理实体?
我有一个这样的模型结构:
例如:我有一个功能可以处理auditorAssignment对象的添加,删除等。因此,在新的软件包中,将有其他控制器公开此类API,服务,存储库(所有软件包私有)以及另一个模块可以使用的一些公共外观(即获取分配或在需要时添加它们)。我应该怎样处理整个模型 - 实体?它应该放在外面的某个核心吗?或者实体应该在包之间拆分,但是公共(为了让关系起作用)?
答案 0 :(得分:1)
您应该按bounded context(BC
)而不是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。如果您将它们拆分为距离微服务一英寸的距离