Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 使用简单的Faç管理依赖关系;VisualStudio 2010中的ade体系结构模式_Visual Studio 2010_Architecture_Dependencies_Projects And Solutions_Layer - Fatal编程技术网

Visual studio 2010 使用简单的Faç管理依赖关系;VisualStudio 2010中的ade体系结构模式

Visual studio 2010 使用简单的Faç管理依赖关系;VisualStudio 2010中的ade体系结构模式,visual-studio-2010,architecture,dependencies,projects-and-solutions,layer,Visual Studio 2010,Architecture,Dependencies,Projects And Solutions,Layer,作为对软件体系结构(以及Visual Studio)的学习练习,我决定创建一组四个最小的WPF/C#应用程序(解决方案),目的只有一个:按下按钮时从文件中读取一些圆参数,并在GUI上显示结果: 一个应用程序读取.txt文件并在文本框中显示参数 一个应用程序读取.xml文件并在画布中显示圆圈 一个应用程序读取.txt并显示圆圈 一个应用程序读取.xml并显示文本参数 也就是说,我有一个包含圆圈类的域项目、两个DataAccess项目(一个用于xml,另一个用于txt)和两个演示项目(一个用于几何图

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

  • 一个应用程序读取.txt文件并在文本框中显示参数
  • 一个应用程序读取.xml文件并在画布中显示圆圈
  • 一个应用程序读取.txt并显示圆圈
  • 一个应用程序读取.xml并显示文本参数 也就是说,我有一个包含圆圈类的域项目、两个DataAccess项目(一个用于xml,另一个用于txt)和两个演示项目(一个用于几何图形,另一个用于显示文本)。四个解决方案中的每一个都是这些可重用、模块化项目的组合

    另外,我希望使用FAçADE设计模式,以便演示“看到”FAçADE,而不是数据访问或域。表面上看域和数据访问,而每个数据访问只是盲目地做他们的生意

    问题是:

    • 我需要两个Façade,因为为了在Façade项目中使用DataAccess命名空间,我必须创建一个与两个DataAccess层之一的命名空间依赖关系。因此,一个Façade依赖于XmlBackend,另一个依赖于TXTBindend
    • 每个展示都依赖于立面,因此名称空间是可用的,但由于我有两个立面,每个展示项目最终都会依赖于两个不同的立面项目,这是一件坏事
    我试图创建一个Façade项目,以便每个演示都引用它,但是这个Façade将依赖于两个不同的DataAccess后端。然后在解决方案中,我不能只有一个DataAccess后端项目,因为Façade项目将依赖于两个不同的项目

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

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


    谢谢你的阅读

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

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

    作为旁注,您的问题的一部分来自这样一个事实:在这个体系结构中,1个项目相当于==1个类,因此对象紧耦合和项目紧耦合问题是混合在一起的


    然而,您应该注意,对象紧密耦合会导致脆弱性、较差的可维护性和可测试性,而项目耦合只会影响可重用性。换句话说,如果Façade引用了两个DataAccess项目,那么这只意味着如果手头没有DataAccess项目,您就不能在另一个上下文/体系结构中重用Façade。

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

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

    作为旁注,您的问题的一部分来自这样一个事实:在这个体系结构中,1个项目相当于==1个类,因此对象紧耦合和项目紧耦合问题是混合在一起的


    然而,您应该注意,对象紧密耦合会导致脆弱性、较差的可维护性和可测试性,而项目耦合只会影响可重用性。换句话说,如果Façade同时引用了两个DataAccess项目,这只意味着如果没有DataAccess项目,您就无法在另一个上下文/体系结构中重用Façade。

    谢谢!你做得很对。我喜欢依赖注入的考虑,我读了很多关于它的书。此外,我还阅读了VisualStudio中的项目配置和元数据,但还没有时间深入研究。最好将这种“项目间”依赖关系保持在解决方案级别,而不是每个项目内部。我再等一会儿,也许会回来接受你的回答。再次感谢!此外,我很快就感觉到每个项目中需要更多的对象,需要更多的项目/层来进一步分离关注点。为什么在项目级别而不是解决方案级别定义依赖项,是为了将项目保持为独立的单元,可以跨多个解决方案重用。还要注意的是,虽然某种程度的项目解耦和依赖注入很好,但项目之间的一些依赖(在您的示例中,GUI=>Façade)只是自然的,不应该避免。最后一点考虑:您说项目间的依赖关系不应该在解决方案级别,这样项目就可以在多个解决方案中重用。但如果我在一个解决方案中选择一个依赖于Xa项目的项目,我如何在另一个依赖于Xb项目的解决方案中使用它。。。这里似乎有一些耦合。但是,有时我注意到项目引用中的引用显示为“灰显”或“警告”(不可用)