业务层Facade与混合业务组件 我目前正在设计一个大型应用程序的基础。我们将使用传统的三层系统,在数据层使用EF,在业务层使用普通的jane c#类,在ui层使用MVC/WCF。我们已经对应用程序进行了足够的原型化,从而认识到这对我们来说是可行的,但是由于业务需求的复杂性,一些业务组件相互交互是常见的。
考虑以下两个业务组件:业务层Facade与混合业务组件 我目前正在设计一个大型应用程序的基础。我们将使用传统的三层系统,在数据层使用EF,在业务层使用普通的jane c#类,在ui层使用MVC/WCF。我们已经对应用程序进行了足够的原型化,从而认识到这对我们来说是可行的,但是由于业务需求的复杂性,一些业务组件相互交互是常见的。,c#,.net,asp.net-mvc,architecture,n-tier-architecture,C#,.net,Asp.net Mvc,Architecture,N Tier Architecture,考虑以下两个业务组件: RetailManager-处理系统中与零售相关的所有事项 CartManager-处理与购物车体验相关的所有事项 例如,在购买商品的结帐过程中,这两者相互作用。需要减少采购项目的库存 以下是我迄今为止的思考过程: 让业务组件相互引用,并确保循环引用不会发生(CartManager引用RetailManager,但决不会以相反的方式)。“Checkout”将是CartManager类上的一个方法,它将调用RetailManager上的一个方法来调整库存。虽然这会起作用
- RetailManager-处理系统中与零售相关的所有事项
- CartManager-处理与购物车体验相关的所有事项
提前感谢。我倾向于使用facade实现 我首先要问自己,在结账时,谁有责任确保减少库存?我认为减少库存不是CartManager的责任。我会有第三个类(在你的例子中是facade),它确保每当一个项目被
CartManager
签出时,相应的项目都会从库存中减少
我将考虑的另一个选项是基于事件的实现。code>CartManager将在项目签出时引发
ItemCheckedOut
事件RetailManager
将订阅此事件,并在引发事件时减少库存。如果您是事件驱动设计的新手,请关注quora上的这个问题-我倾向于使用facade实现
我首先要问自己,在结账时,谁有责任确保减少库存?我认为减少库存不是CartManager的责任。我会有第三个类(在你的例子中是facade),它确保每当一个项目被CartManager
签出时,相应的项目都会从库存中减少
我将考虑的另一个选项是基于事件的实现。code>CartManager将在项目签出时引发
ItemCheckedOut
事件RetailManager
将订阅此事件,并在引发事件时减少库存。如果您是事件驱动设计的新手,请遵循quora上的这个问题-我个人喜欢的模式,它自然适合其他架构模式
例如,并适合于复杂领域。我个人喜欢的模式,它自然适合其他架构模式
这是使用管理器/服务类的典型问题。他们总是容易发胖。当您达到这一点时,最好开始使用命令 因为您使用的是IoC,所以最棒的事情是您不必直接重构所有代码,但可以在有时间的时候进行重构。只需开始为所有新功能编写命令,同时为所有其他功能保留旧体系结构 以下是命令简介:
以及我自己的框架简介:这是使用管理器/服务类的典型问题。他们总是容易发胖。当您达到这一点时,最好开始使用命令 因为您使用的是IoC,所以最棒的事情是您不必直接重构所有代码,但可以在有时间的时候进行重构。只需开始为所有新功能编写命令,同时为所有其他功能保留旧体系结构 以下是命令简介:
以及我自己的框架介绍:您考虑过DDD方法吗?是的,也不是。谢谢你的推荐。我会好好看一看的。可以说,我们的业务对象是我们考虑域的聚合根。话虽如此,我需要重温一下DDD原则。看看这篇文章,你考虑过DDD方法吗?是的,也不是。谢谢你的推荐。我会好好看一看的。可以说,我们的业务对象是我们考虑域的聚合根。话虽如此,我还是需要重温一下DDD原则。看看这篇文章,我同意这不是CartManager的责任。我倾向于你在第一段中描述的内容。我对事件驱动设计有很高的理解,但对使用它几乎没有实际知识。我会查看你的链接,