【问题标题】:Managing dependencies with a simple Façade architecture pattern in VisualStudio 2010在 Visual Studio 2010 中使用简单的 Façade 架构模式管理依赖项
【发布时间】:2013-01-22 13:11:40
【问题描述】:

作为软件架构(以及 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 Library 表示以下内容,我认为这可能是一个提示:“[解决方案资源管理器允许您] 添加对解决方案中的多个项目或解决方案有用的项目,而无需引用每个项目中的项目项目。”

感谢阅读!

【问题讨论】:

    标签: visual-studio-2010 architecture dependencies projects-and-solutions layer


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!你做对了。我喜欢依赖注入的考虑,我已经阅读了很多关于它的内容。另外,我已经阅读了 Visual Studio 中的项目配置和元数据,但还没有时间深入研究。最好将这种“项目之间”的依赖关系保留在解决方案级别,而不是在每个项目中。我会再等一会儿,可能会回来接受你的回答。再次感谢!
    • 另外,我很快感觉到每个项目中需要更多的对象,以及更多的项目/层以进一步分离关注点。
    • 在项目级别而不是解决方案级别定义依赖项的原因是为了将项目保持为可以跨多个解决方案重用的独立单元。另请注意,虽然一定程度的项目解耦和依赖注入很好,但项目之间的一些依赖关系(在您的示例中,GUI => Façade)是自然而然的,不应避免。
    • 不错。最后一个考虑因素:您说项目间的依赖关系不应该处于解决方案级别,以便项目可以在多个解决方案中重用。但是,如果我采用一个项目,它在一个解决方案中依赖于项目 Xa,我怎么能在另一个依赖于项目 Xb 的解决方案中使用它......这里似乎有一些耦合。但是,有时我注意到项目引用文件夹中的引用显示为“灰色”或“警告”(不可用),即便如此,似乎解决方案构建得很好。感谢您的关注!
    • 据我所知,您不能让项目 X 在一个解决方案中依赖项目 Xa 而在另一个解决方案中依赖 Xb。如果您以纯文本格式打开 .csproj 文件,您将看到项目引用是使用引用的 .csproj 的相对路径定义的,但还会提及其 Guid。我猜当 Visual Studio 无法从路径中找到 csproj 文件时,它会显示一个警告,但仍设法根据 Guid 对其进行处理。
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2014-08-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多