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