干净架构中从网关到框架的依赖关系

2024-02-16

假设我想要实现一个基于 Uncle Bobs Clean Architecture 的 ASP.NET 应用程序。据我了解:

  • Asp.Net 本身将属于框架圈
  • Asp.Net 控制器位于网关/接口适配器层
  • 我的业务逻辑将位于用例/实体层

依赖规则规定只允许从外圈到内圈的依赖。

据我了解,依赖关系规则不仅与控制流有关,而且与一般的代码级依赖关系有关。

但是:为了在“网关”圈中拥有一个 Asp.Net 控制器,它必须从 Asp.Net Controller 类派生。

问题:这是否会违反依赖关系规则,因为这会引入从“网关”圈到“框架”圈的编译时依赖关系?

Update:我在最近的博客文章中更详细地讨论了这个问题https://plainionist.github.io/Implementing-Clean-Architecture-AspNet/ https://plainionist.github.io/Implementing-Clean-Architecture-AspNet/


是的,它违反了规则。

但框架供应商并不关心这一点,相反,他们努力让我们的应用程序供应商锁定在他们的框架上。

因此我们应该根据项目需求来选择我们的技术栈,包括框架。如果要求我们快速创建原型,我们就需要选择一个能够帮助我们做RAD的框架。如果需求告诉我们业务概念已经建立并且应用程序将长期存在,那么我们需要选择一个框架,使我们的应用程序能够与框架和其他工具解耦,以便我们可以轻松更新和/或交换工具,包括框架。

例如,Symfony 允许我们将控制器与框架耦合或解耦。当谈到 ORM 时,我们也遇到这个问题,Propel 迫使我们拥有扩展 Propel 实体的实体,而 Doctrine 允许我们拥有完全不知道 ORM 的实体。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

干净架构中从网关到框架的依赖关系 的相关文章

随机推荐

  • 从 python 有序字典中删除键的复杂性

    从 python 中删除一个键dict or defaultdict在Python中是O 1 操作 正如这里提到的 https www ics uci edu brgallar week8 2 html and here https wik
  • 在 C# 中,将 ulong[64] 转换为 byte[512] 更快吗?

    我有一种方法可以在 for 语句中使用二进制移位将 ulong 转换为字节 但它的时间效率不是很高 有没有办法投射ulong大小为 64 的数组直接转换为大小为 512 的字节数组 这是一段运行数千次的代码 我需要保存每一毫秒 这样我才能节
  • 使用 Python 和 C++ 进行实时处理和回调

    我需要编写代码来执行一些计算相当复杂的实时处理 我想创建一些 Python 类来管理我的所有脚本 并保留用 C 编码的算法的密集部分 以便它们可以尽可能快地运行 我想在 Python 中实例化对象 并让 C 算法通过 Python 中的回调
  • 如何找到包含我的包的堆栈解析器?

    尝试使用最新的堆栈解析器 lts 13 4 安装 hip 不起作用 请参阅我的问题here https stackoverflow com questions 54296951 stack does not resolve dependen
  • 如何将ios 13 UISegmentedControl背景颜色设置为白色?

    我正在尝试在 iOS 13 中为正常状态设置分段控件的背景颜色 我有与此处列出的相同的问题 如何在 iOS 13 中将 UISegmentedControl 的背景颜色设置为白色 https stackoverflow com questi
  • 为什么 bash errexit 在函数调用中的行为不符合预期?

    在 bash 手册页中 它指出 如果管道 可能由单个简单命令组成 请立即退出 括在括号中的子 shell 命令 或执行的命令之一 用大括号括起来的命令列表的一部分 所以我假设函数应该被视为用大括号括起来的命令列表 但是 如果对函数调用应用条
  • UPS 访问许可证号

    我在用马克桑伯恩 UPS 功能 http www marksanborn net php calculating ups shipping rate with php 使用 php 计算 UPS 运费 在此函数中 您必须更改已定义的变量的一
  • 避免在 DispatchQueue 中使用 self

    我想知道如何消除使用self在 的里面DispatchQueue 作为一个好的实践 我们应该使用self仅在init func loadAllClasses DispatchQueue global qos background async
  • 如何避免在java unirest请求中发送Cookie头?

    我注意到使用unirest https github com Mashape unirest java默认情况下 java 库 cookie 在响应中设置后在请求中发送 就像任何浏览器一样 有什么办法可以避免吗 Example public
  • javascript 获取类型/实例名称

    有没有可靠的方法来获取 JavaScript 对象的实例 例如 依靠假 obj getInstance 功能 var T Q W C function var x new T Q W C console log x getInstance
  • 为什么Java不支持<<<运算符

    为什么Java不支持 lt lt lt 无符号左移 运算符 但确实支持 gt gt gt 无符号右移 运算符 Java添加了运算符 gt gt gt 来执行逻辑右移 但是 因为逻辑和算术左移运算是 完全相同的 Java中没有 from Ja
  • GUI什么时候会过载?

    假设你是永久在 UI 线程 调度程序上异步调用方法 while true uiDispatcher BeginInvoke new Action
  • 使用 KnockoutJS 和 Jquery 对话框时 jQuery 验证失败

    我有一个在 MVC3 中使用 html RenderAction 呈现的表单 除此之外 我有一个与淘汰赛一起使用的 jquery 模板 使用默认的 data val required 属性将模型正确呈现到视图中 不过我注意到 jQuery
  • 如何使条形图自动在不同颜色之间循环?

    In matplotlib 自动绘制颜色循环线 这两条线图将具有不同的颜色 axes plot x1 y axes plot x2 y 然而 条形图则不然 这两个数据系列都有蓝色条 axes bar x1 y axes bar x2 y 如
  • 使用 Perl,如何用逗号替换换行符?

    我放弃了 sed 我听说 Perl 中的它更好 我想要一个可以从 unix 命令行调用并转换 DOS 行结尾的脚本CRLF来自输入文件并在输出文件中用逗号替换它们 like myconvert infile gt outfile 其中 in
  • 警告:解析“显示”值时出错。宣言落空。线路:0

    警告 解析 显示 值时出错 宣言落空 线路 0 我不确定当我留下此警告时会发生什么 因为我在任何页面中都没有看到任何奇怪的行为 我还是想删除它以防万一 有人可以帮我尝试找到解决方案吗 谢谢 EDIT 我刚刚注意到我的 php 脚本中有一个错
  • 在 Eclipse 中抑制 FindBugs 警告

    我使用字符串作为锁 因此想确保该对象是一个新实例 FindBugs 抱怨是因为直接定义字符串 使用双引号 通常更有效 我的代码如下所示 A lock for the list of inputs edu umd cs findbugs an
  • System.Web.HttpException:无法在 DropDownList 中选择多个项目

    在页面加载期间 索引 0 已被选择 然后这段代码语句选择了索引1 dropDownList Items FindByValue myValue Selected true assume myValue is found at index 1
  • XAMPP:如何升级 PEAR

    尝试升级 XAMPP pear 时出现以下错误 Fatal error Cannot use result of built in function in write context in C xampp php pear Archive
  • 干净架构中从网关到框架的依赖关系

    假设我想要实现一个基于 Uncle Bobs Clean Architecture 的 ASP NET 应用程序 据我了解 Asp Net 本身将属于框架圈 Asp Net 控制器位于网关 接口适配器层 我的业务逻辑将位于用例 实体层 依赖