1

作为软件架构(以及 Visual Studio)的学习练习,我决定创建一组四个最小的 WPF/C# 应用程序(解决方案),其目的只有一个:按下按钮时从文件中读取一些圆形参数,并显示GUI上的结果:

  1. 一个应用程序从 .txt 文件中读取并在文本框中显示参数;
  2. 一个应用程序从 .xml 文件中读取并在画布中显示圆圈;
  3. 一个应用程序从 .txt 读取并显示圆圈;
  4. 一个应用程序从 .xml 读取并显示文本参数;

也就是说,我有一个包含 Circle 类的域项目、两个 DataAccess 项目(一个用于 xml,另一个用于 txt)和两个演示项目(一个用于几何绘图,另一个用于显示文本)。这四种解决方案中的每一种都指的是这些可重用的模块化项目的组合。

另外,我想使用 FAÇADE 设计模式,以便演示文稿“看到”外观,但看不到数据访问或域。Façade 看到了 Domain 和 DataAccess,而每个 DataAccess 只是盲目地做自己的事情。

问题是:

  • 我需要两个 Façade,因为我必须为两个 DataAccess 层之一创建一个命名空间依赖项,以便在 Façade 项目中使用 DataAccess 命名空间。所以一个 Façade 依赖于 XmlBackend,另一个依赖于 TxtBackend;
  • 每个 Presentation 都依赖于 Façade,因此命名空间可用,但是由于我有两个 Façade,每个 Presentation 项目最终都会依赖于两个不同的 Façade 项目,这是一件坏事;

我试图创建一个单一的 Façade 项目,以便每个 Presentation 都引用它,但是这个 Façade 将依赖于两个不同的 DataAccess 后端。然后在一个解决方案中,我不能只有一个 DataAccess 后端项目,因为 Façade 项目将依赖于两个不同的后端项目。

所以问题是:我如何解决这个问题,以便我可以有四个解决方案,每个解决方案只有必要的项目(域、外观、一个演示和一个数据后端),不违反分层架构,每个项目不需要对其他人了解太多?

更新:Msdn 库说以下内容,我认为这可能是一个提示:“[解决方案资源管理器允许您] 添加对解决方案中的多个项目或解决方案有用的项目,而无需引用每个项目中的项目。”

谢谢阅读!

4

1 回答 1

1

如果您想要完全解耦并且绝对需要 Façade 可独立于两个 DataAccess 模块重用,您可以让 Façade 层声明IDataAccess两个 DataAccess 项目中的类都将实现的接口。

然后,第三方模块(GUI 之一?)将在运行时根据需要将正确的 DataAccess 具体实现注入外观。

作为旁注,您的部分问题来自这样一个事实,即在此架构中,1 个项目几乎 == 1 个类,因此对象紧密耦合和项目紧密耦合问题混淆了。

但是,您应该注意,对象紧密耦合会导致脆弱性、可维护性和可测试性差,而项目耦合只会影响可重用性。换句话说,您可以使用 Façade 引用两个 DataAccess 项目,这仅意味着您不能在没有 DataAccess 项目的情况下在另一个上下文/架构中重用 Façade。

于 2013-01-23T16:43:24.967 回答