在不使用IoC容器的情况下,是否可以在3层或n层体系结构中进行可测试的洋葱样式代码?

挡泥板

如果我理解正确,那么在经典的3层/ n层体系结构中,目标是最终以这样一种方式将职责分开,即每一层都不必知道较低层内部正在使用/正在使用的内容。

但是,如果每个层(尤其是业务层)中的对象被构​​造为可测试的,则它们的依赖关系将被定义为其公共合同的一部分(当测试具有第三层对象依赖关系的第二层对象时,对第三层对象进行模拟/存根)层对象并将其提供给第二层对象)。这意味着在实施时,第一层负责获取第三层依赖关系,以用于构造第二层对象。如果它是一个非常平淡的对象,我并不反对,但是如果它是一个需要例如连接字符串的数据访问组件,则第一层不应该对此负责。除此之外,您拥有的依赖关系越多,顶层负责实例化并传入所使用的洋葱切片中每个对象的所有依赖关系。

我见过解决此问题的唯一方法是通过使用IoC,但是我正在解决该选项无法使用的情况。还有其他方法可以将代码结构化为可测试的,但不会遇到实例化/提供顶层每一层依赖关系的问题吗?我应该提到我正在使用网络应用程序。

(我已经过了这篇文章,作为“规则”的复习。)

编辑:我想我可以这样概括问题:在不使用某种IoC容器或引导程序的情况下,有没有一种方法可以将代码构造为可测试的,并且不会违反依赖关系深度原则,这就是洋葱只能引用下面的图层吗?

拉迪斯拉夫·姆恩卡

它与顶层本身无关,而与引导程序有关,引导程序将初始化您的应用程序。根据架构的其余部分,它可以负责在应用程序顶层启动入口点,也可以只是顶层初始化的一部分(甚至与IoC框架一起使用)。

.NET中的示例:

如果您要构建独立的应用程序,则可以将内容初始化为主要执行路径的一部分,只有在所有内容都初始化后,您才会启动入口点。对于Web应用程序或Web服务,此类引导程序通常发生在应用程序启动处理程序中,并且在处理HTTP请求时会使用您的层。

顺便说一句。问题应该是关于IoC容器。与IoC本身无关。IoC是从外部控制内部逻辑的方法-通过注入依赖关系来实现。这是易于测试的应用程序的主要方法。IoC容器是为您构建依赖关系层次结构的框架的一部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

洋葱体系结构中的典型层是什么?

来自分类Dev

如何在不使用样式功能的情况下动态样式化Cluster层

来自分类Dev

在不使用eval的情况下,是否可以在shell脚本中进行命令注入?

来自分类Dev

是否可以在不使用where子句的情况下从2个表中进行选择?

来自分类Dev

如何在MVC中实现n层体系结构?

来自分类Dev

如何使用RabbitMQ在3层体系结构中存储表单数据

来自分类Dev

使用ASP.NET 5(MVC 6)的N层体系结构

来自分类Dev

tf.matmul是否等效于在某些情况下密集层在张量流中进行的操作?

来自分类Dev

SW体系结构-在服务层和持久层之间进行缓存

来自分类Dev

体系结构中的服务层-DLL?

来自分类Dev

体系结构中的服务层-DLL?

来自分类Dev

是否可以在具有WebAPI服务的三层体系结构的SQL Server数据库中使用Windows身份验证?

来自分类Dev

是否可以在不使用Arquillian容器管理和部署的情况下使用Arquillian Graphene?

来自分类Dev

如何在MIPS体系结构中不使用J-Type指令的情况下保存程序计数器地址

来自分类Dev

洋葱与N层架构

来自分类Dev

是否可以在不使用GObject样式构造的情况下扩展基本的Gtk小部件?

来自分类Dev

是否可以在不使用 docker 的情况下运行 docker 容器?

来自分类Dev

如何使用ASP.NET C#使用3层体系结构从数据库返回数据

来自分类Dev

是否有专门用于业务逻辑层的JavaEE体系结构?

来自分类Dev

如何在不使用 Stripe 的 UI 层的情况下获取客户端令牌?

来自分类Dev

是否可以在不使用p:columns的情况下对ap:dataTable进行动态列排序?

来自分类Dev

是否可以在不使用静态字段的情况下对彼此的字段进行两次访问?

来自分类Dev

在我的情况下,ARM和x86是否需要处理硬件体系结构兼容性?

来自分类Dev

是否可以在不使用rhc的情况下使用OpenShift?

来自分类Dev

是否可以在不使用MFC的情况下使用CListCtrl

来自分类Dev

在不使用JavaScript的情况下使用第n个孩子时是否可以访问n?

来自分类Dev

3层体系结构中的ASP.NET成员资格提供程序实现

来自分类Dev

在asp.net中创建3层体系结构的最佳实践

来自分类Dev

将下拉列表与3层体系结构中的通用列表绑定

Related 相关文章

  1. 1

    洋葱体系结构中的典型层是什么?

  2. 2

    如何在不使用样式功能的情况下动态样式化Cluster层

  3. 3

    在不使用eval的情况下,是否可以在shell脚本中进行命令注入?

  4. 4

    是否可以在不使用where子句的情况下从2个表中进行选择?

  5. 5

    如何在MVC中实现n层体系结构?

  6. 6

    如何使用RabbitMQ在3层体系结构中存储表单数据

  7. 7

    使用ASP.NET 5(MVC 6)的N层体系结构

  8. 8

    tf.matmul是否等效于在某些情况下密集层在张量流中进行的操作?

  9. 9

    SW体系结构-在服务层和持久层之间进行缓存

  10. 10

    体系结构中的服务层-DLL?

  11. 11

    体系结构中的服务层-DLL?

  12. 12

    是否可以在具有WebAPI服务的三层体系结构的SQL Server数据库中使用Windows身份验证?

  13. 13

    是否可以在不使用Arquillian容器管理和部署的情况下使用Arquillian Graphene?

  14. 14

    如何在MIPS体系结构中不使用J-Type指令的情况下保存程序计数器地址

  15. 15

    洋葱与N层架构

  16. 16

    是否可以在不使用GObject样式构造的情况下扩展基本的Gtk小部件?

  17. 17

    是否可以在不使用 docker 的情况下运行 docker 容器?

  18. 18

    如何使用ASP.NET C#使用3层体系结构从数据库返回数据

  19. 19

    是否有专门用于业务逻辑层的JavaEE体系结构?

  20. 20

    如何在不使用 Stripe 的 UI 层的情况下获取客户端令牌?

  21. 21

    是否可以在不使用p:columns的情况下对ap:dataTable进行动态列排序?

  22. 22

    是否可以在不使用静态字段的情况下对彼此的字段进行两次访问?

  23. 23

    在我的情况下,ARM和x86是否需要处理硬件体系结构兼容性?

  24. 24

    是否可以在不使用rhc的情况下使用OpenShift?

  25. 25

    是否可以在不使用MFC的情况下使用CListCtrl

  26. 26

    在不使用JavaScript的情况下使用第n个孩子时是否可以访问n?

  27. 27

    3层体系结构中的ASP.NET成员资格提供程序实现

  28. 28

    在asp.net中创建3层体系结构的最佳实践

  29. 29

    将下拉列表与3层体系结构中的通用列表绑定

热门标签

归档