Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
C# 我应该按项目分开吗_C#_Oop_Design Patterns_Domain Driven Design_Ninject - Fatal编程技术网

C# 我应该按项目分开吗

C# 我应该按项目分开吗,c#,oop,design-patterns,domain-driven-design,ninject,C#,Oop,Design Patterns,Domain Driven Design,Ninject,我是领域驱动设计架构的新手。我的项目解决方案如下: 演示文稿(网络) 应用程序层 QueryLayer QueryHandlerLayer 数据层 我从文章中读到,这些分离是为了隔离工作 演示文稿项目参考应用程序层 但不引用QueryLayer、QueryHandlerLayer和DataLayer 但我正在使用IoC容器并将类型绑定到接口。 container.Bind(数据接口).To(数据类) Bind(查询接口).To(查询类) 我可以在PresentationLayer上这样做

我是领域驱动设计架构的新手。我的项目解决方案如下:

  • 演示文稿(网络)
  • 应用程序层
  • QueryLayer
  • QueryHandlerLayer
  • 数据层
我从文章中读到,这些分离是为了隔离工作

演示文稿项目参考应用程序层 但不引用QueryLayer、QueryHandlerLayer和DataLayer

但我正在使用IoC容器并将类型绑定到接口。

  • container.Bind(数据接口).To(数据类)
  • Bind(查询接口).To(查询类)
我可以在PresentationLayer上这样做。但现在所有项目都将添加对表示层的引用


这是关于架构的问题吗?或者我可以为所有层分离IoC容器绑定吗?

使用DI是关于组合应用程序的。一个应用程序可能有多个层,但它们仍然是同一应用程序的一部分,必须组合在一起

编写应用程序的适当位置在中,它应该尽可能靠近应用程序的入口点

基本上有3种常见的建议用于组合具有多个层的应用程序,它们都是完全可以接受的

  • 不要将层分离为物理组件
  • 在表示层中编写应用程序,并引用表示层中的所有其他层
  • 创建一个引用所有其他层的单独合成层
  • 对于第三个选项,您应该记住,合成层应该驱动而不是由应用程序的其余部分驱动


    请参阅,了解此引用背后的原因,以及为什么从组合根引用每个库以避免紧密耦合很重要。或者,如前所述,您可以使用后期绑定来编写应用程序,而无需直接引用程序集,前提是部署脚本通过DLL进行复制。

    使用DI就是编写应用程序。一个应用程序可能有多个层,但它们仍然是同一应用程序的一部分,必须组合在一起

    编写应用程序的适当位置在中,它应该尽可能靠近应用程序的入口点

    基本上有3种常见的建议用于组合具有多个层的应用程序,它们都是完全可以接受的

  • 不要将层分离为物理组件
  • 在表示层中编写应用程序,并引用表示层中的所有其他层
  • 创建一个引用所有其他层的单独合成层
  • 对于第三个选项,您应该记住,合成层应该驱动而不是由应用程序的其余部分驱动


    请参阅,了解此引用背后的原因,以及为什么从组合根引用每个库以避免紧密耦合很重要。或者,如前所述,您可以使用后期绑定来编写应用程序,而无需直接引用程序集,前提是您的部署脚本通过DLL进行复制。

    我认为我在最近的使用中学到的最大一点是,在基本层面上,DI是关于注入依赖性的。这是一个相当多余的描述,所以让我详细说明一下:

    DI从设计开始。每样东西都应该通过构造器或某种工厂提供它所需要的东西。在这里,接口是您最好的朋友。一旦你做到了这一点,大部分工作就完成了。假设一些项目是共享的,那么现在您已经将所有工作委派给使用它的人。然而,这可能是老消息了

    下一步,如果您正在控制容器,考虑创建默认模块,在NyCube的情况下是默认的模块,<代码> NinjectModule < /代码>。为每个应用程序层创建其中一个。可以说,这将形成“指令”,用于程序最高级别的容器将所有部分放在一起

    这一切都可以通过反射诡计来实现,反射诡计周围有大量信息


    然后,只要将所有这些绑定的“说明手册”加载到组合根目录(通常在应用程序中)就可以了。

    我认为我在最近的使用中学到的最重要的一点是,在基本层面上,DI是关于注入依赖性的。这是一个相当多余的描述,所以让我详细说明一下:

    DI从设计开始。每样东西都应该通过构造器或某种工厂提供它所需要的东西。在这里,接口是您最好的朋友。一旦你做到了这一点,大部分工作就完成了。假设一些项目是共享的,那么现在您已经将所有工作委派给使用它的人。然而,这可能是老消息了

    下一步,如果您正在控制容器,考虑创建默认模块,在NyCube的情况下是默认的模块,<代码> NinjectModule < /代码>。为每个应用程序层创建其中一个。可以说,这将形成“指令”,用于程序最高级别的容器将所有部分放在一起

    这一切都可以通过反射诡计来实现,反射诡计周围有大量信息

    然后,只需将所有这些绑定的“说明手册”加载到组合根目录(通常在应用程序中),就可以了