【发布时间】:2012-10-28 00:24:46
【问题描述】:
我目前正在为一个大型应用程序设计基础。我们将使用传统的 3 层系统,在数据层使用 EF,在业务层使用纯 jane c# 类,在 ui 层使用 MVC/WCF。我们已经对应用程序进行了足够多的原型设计,以意识到这对我们有用,但是由于业务需求的复杂性某些业务组件之间的交互很常见。
考虑以下两个业务组件:
- RetailManager - 处理系统中与零售相关的一切
- CartManager - 处理与购物车体验相关的一切
例如,在购买商品时的结账过程中,两者会进行交互。所购商品的库存需要减少。
到目前为止,这是我的思考过程:
让业务组件相互引用并确保循环引用永远不会发生(CartManager 引用 RetailManager,但绝不会反过来)。 “Checkout”是 CartManager 类的一个方法,它会调用 RetailManager 的一个方法来调整库存。虽然这会起作用,但我不确定它的扩展性如何,以及随着时间的推移维护成本会是多少。我觉得这不是 100%“正确”的。
-
在业务组件和 UI 层之间创建一个外观。在本例中,Facade 将具有 checkout 方法和对两个管理器的引用。我比第一种方法更喜欢这种方法,但是我知道并不是我的所有业务对象都需要 Facade,而且我不想创建大量的 Facade 类只是为了有空的传递方法。
我倾向于 2,但需要注意的是,我只会在需要的地方创建外观类。 UI 层将可以访问 Facade 和业务层组件,并且必须知道何时使用哪个(我不喜欢这个解决方案的唯一部分)。
我进行了大量研究,但未能提出一个感觉完全正确的解决方案。
欢迎任何关于以这种方式使用外观模式的想法,或其他解决问题的想法。
提前致谢。
【问题讨论】:
-
您考虑过 DDD 方法吗? Correct use of Aggregate Roots
-
是和不是。感谢您的参考,我会好好读一读。我可以说我们的业务对象是我们认为的域的聚合根。话虽如此,我需要复习 DDD 原则。
标签: c# .net asp.net-mvc architecture n-tier-architecture