首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何处理清洁架构中不属于业务逻辑的通用功能

如何处理清洁架构中不属于业务逻辑的通用功能
EN

Software Engineering用户
提问于 2017-08-22 02:59:04
回答 3查看 818关注 0票数 3

清洁建筑中的依赖规则声明:

..。该源代码依赖项只能指向内部。

我现在遇到了一个我自己也搞不懂的问题。

假设我有一个具有应用程序业务规则abr的模块和两个用于实现来自abr接口的服务的模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
           +---------+
           |   abr   |             Business Layer (defines interfaces
           +---------+             'Service1' and 'Service2')
      +----^         ^---+
 - - -|- - - - - - - - - |- - - - -
      |                  |
+-----+----+       +-----+----+
| service1 |       | service2 |    Dependencies (implement Interfaces 
+----------+       +----------+    define in abr)

现在,这两个服务使用网络库OkHttp,并且应该对它们的请求使用相同的用户代理字符串。

不幸的是,我不知道如何很好地实现这一点。

可能的可能性有:

  • 创建两个服务依赖于sharedokhttpconfig的模块on,这违反了on规则
  • 将代码放在abr中,这违反了abr不应该知道的网络,甚至服务使用okhttp。
  • 复制代码以在两个services代码复制中设置用户代理都是错误的

另一个例子是,这个项目有两个不同的UI模块,它们本质上是不同的,但是它们中的一些逻辑是相同的。

例如格式化用户的地址。

对如何处理这件事有什么建议吗?

为了澄清为什么我认为这会违反依赖性规则。

abr是我的应用程序的中间部分,它不应该知道UI或其他任何东西,所以所有依赖项都必须指向它的方向。

但是当我添加两个模块所依赖的模块时,在我看来,它们似乎是指向外的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
           +---------+
           |   abr   |
           +---------+
      +----^ Inwards ^---+
      |                  |
+-----+----+       +-----+----+
| service1 |       | service2 |
+----------+       +----------+
      |     Outwards?    |
      +----v         v---+
           +---------+
           |  snbl   | snbl = share non-business logic
           +---------+

或者这样做还行,因为从abr的角度来看,没有什么改变吗?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2017-08-22 04:11:50

经过与“任择议定书”的讨论,我们得出了以下共同的结论:

这两个服务的接口被声明为业务逻辑的一部分,而它的实现不是它的一部分。因此,如果这些实现依赖于OkHttp的配置数据,这是有意义的。

向前迈进的最有希望的解决方案是声明模块snbl (其中包括配置数据),并将服务与实现圈在一起。那么,这些数据与OkHttp的配置数据之间的依赖关系并不违反依赖关系规则。

票数 1
EN

Software Engineering用户

发布于 2017-08-23 10:32:55

我只想在接受答案中添加一些内容,以及对布朗博士的有洞察力的回答进行扩展。Bob叔叔的清洁建筑中隐含的是,“在”所有东西下面都有每个循环所依赖的一些公共基础结构(例如,随语言提供的标准库,以及其他可以选择作为标准的组件)。

因此,这可以归结为决定OkHttp库所需的隔离级别。让我们先假设您的“依赖”层或多或少对应于Bob叔叔的“接口适配器”循环;如果您不介意这个层/圈直接依赖于OkHttp,那么您可以将snbl放在那里,并让它直接引用OkHttp

另一方面,如果您希望避免依赖于OkHttp,那么您可以应用与业务层完全相同的依赖反转技巧。这实际上是右下角插入的内容;但下面是I 找到在互联网上的另一张图片,它显示了倒置是如何发生的:

基本上,您所做的是声明您的“依赖关系”层所需的接口(在同一层中),然后在“更远”的另一个层中实现它。这个外层大致对应于“框架和驱动程序”循环;您的snbl组件将在那里实现,在那里它将再次直接引用OkHttp

最后,我想承认,这是(除非我大错特错)博士布朗在他自己的回答中说得更简洁了(至少在关键点上是如此)。

票数 3
EN

Software Engineering用户

发布于 2017-08-22 04:01:04

你基本上有两种选择:

  • 要么以使用第三方库和框架的方式处理它,要么使用依赖反转。您需要安排一些接口,以便将应用程序的SNBL部分“停靠”到不同的服务,因此服务只依赖于接口,而不是直接依赖于SNBL。如果您愿意,您可以将SNBL部件单独放在一个圆圈中,在您放置服务的环和OkHttp居住的环之间。
  • 或者,您可以将SNBL声明为服务所在的同一圈的一部分。它可能不是严格意义上的“业务逻辑”,但它可能是其他地方不需要的支持功能,因此“最佳”位置可能仍然是业务逻辑层。这使您可以选择省略DI。
票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/356080

复制
相关文章
未识别的网络的原因 未识别网络的解决方法
相信会有很多的网友遇到过一个问题,就是明明已经连接了路由器,却显示出一个黄色的小感叹号,互联网就无法正常使用了。再点击开关于网络连接的页面之后会显示未识别的网络。那么在大家遇到这种情况的时候,会如何解决呢?下面就来为大家带来一些实用的解决方法。
用户8739990
2021/07/23
7.3K0
未识别的网络的原因 未识别网络的解决方法
JWT-JSON Web令牌的深入介绍
从桌面应用程序到Web应用程序或移动应用程序,身份验证是几乎所有应用程序中最重要的部分之一。 本教程是JWT(JSON Web令牌)的深入介绍,可帮助您了解:
ccf19881030
2020/06/29
2.4K0
JWT-JSON Web令牌的深入介绍
Linux 修改密码出现“鉴定令牌操作错误”
第二种:lsattr /etc/shadow 得到----i--------e- /etc/shadow(文件的隐藏属性,具体不扩展),这里需要将i去掉,用chattr -i /etc/shadow
用户5760343
2022/05/24
8.1K0
JSON Web 令牌(JWT)是如何保护 API 的
你可以已经听说过 JSON Web Token (JWT) 是目前用于保护 API 的最新技术。
用户4283147
2022/10/27
2.1K0
不为别的,聊聊react源码的设计理念
以前在看一些开源项目的源码时,比如cornerstone(一种为医学影像服务的web框架),折服于其优秀的设计模式,灵活的工具扩展,丰富的数据结构,在当时阅读和学习这些源码时,都是出于公司业务考虑,只是看懂了个大概,而如今随着编码技能的提高和经验的积累,我发现,源码的背后其实是在阐述一种设计理念,自顶而下,设计思想抽象逐渐落地,落实到每一行代码,同时我也有了进一步的体会,软件架构在某种程度上是为了服务它的设计理念,它的技术平衡点。
用户3986961
2022/03/15
6430
不为别的,聊聊react源码的设计理念
golang--ratelimit令牌桶原理分析
限流对某一时间窗口内高于系统承载的请求进行限制,通过限速来保护系统,一旦达到限制速率则可拒绝服务,等待。常见调用平台及服务,比如微信发消费券服务每秒500qps,万一我们超过请求频次,就会发生意想不到的业务问题,踩过坑的小伙伴深有体会
小许code
2023/02/21
7340
golang--ratelimit令牌桶原理分析
3种常见的Class级别的错误
ClassNotFoundException 很明显,这个错误是 找不到类异常,即在当前classpath路径下找不到这个类。 ClassNotFoundException继承了Exception,是必须捕获的异常,所以这个异常一般发生在显示加载类的时候,如下面两种方式显示来加载类并要捕获异常。 public static void main(String[] args) { try { Class.forName("com.User"); } catch (ClassN
Java技术栈
2018/03/30
2.9K0
3种常见的Class级别的错误
如何使用jwtXploiter测试JSON Web令牌的安全性
 关于jwtXploiter  jwtXploiter是一款功能强大的安全测试工具,可以帮助广大研究测试JSON Web令牌的安全性,并且能够识别所有针对JSON Web令牌的已知CVE漏洞。 jwtXploiter支持的功能如下: 篡改令牌Payload:修改声明和值; 利用已知的易受攻击的Header声明(kid、jku、x5u); 验证令牌有效性; 获取目标SSL连接的公钥,并尝试在仅使用一个选项的密钥混淆攻击中使用它; 支持所有的JWA; 生成JWK并将其插入令牌Header中
FB客服
2023/03/30
1.1K0
如何使用jwtXploiter测试JSON Web令牌的安全性
React 错误边界指南
虽然在错误到达生产环境之前捕获错误是理想的,但是其中一些错误(例如网络错误)可能会通过测试而影响用户。如果你的 React 组件没有正确地捕捉到第三方库或 React Hooks 抛出的错误,这样的错误要么导致 React 生命周期崩溃,要么到达主执行线程的顶层,导致“白屏”场景:
用户8921923
2022/10/24
2.5K0
React 错误边界指南
PHP解析json、xml错误
解析json php内置函数json_decode() 可以解析json字符串 但是有的时候看起来正确的json,解析却一直返回null。 你知道吗,json是可能解析失败的,此时PHP不会产生提示。 我们需要手动通过json_last_error()函数获取 function json_decode_siam($string, $mark = false){ $data = json_decode($string, $mark); switch (json_last_error()) {
宣言言言
2019/12/15
2.5K0
大数据分析:闻香识佳人
  大数据还是大忽悠?作为科技领域最时髦的词汇之一,大数据(Big Data)带来的机遇究竟有没有被过分炒作?在2013年夏季达沃斯论坛上,这个议题以一场辩论会的形式展开。最终胜出的观点:反方认为,作为热概念,“大数据”正在影响着传统制造业、零售业、金融业、汽车业、物流业,也令研究机构和政府部门大开眼界。   可视化的大数据才是酷的,好比双目失明的退休中校斯莱德能够闻香识佳人。 “我们不关心你的数据到底有多大,而关心怎么来处理数据,数据开发的结果哪些是软件解决不了的,也就是从大数据中获得一种‘可视化’的意
CDA数据分析师
2018/02/05
5330
给在本机运行的 React 程序配置 HTTPS
如果用 create-react-app 构建一个程序,并且在本地运行,默认情况下会用 HTTP 协议为该程序提供服务。而在生产环境中运行的程序都用 HTTPS 进行服务。
疯狂的技术宅
2020/11/03
2.9K0
给在本机运行的 React 程序配置 HTTPS
动态令牌_创建安全令牌
HMAC-based One-Time Password 简写,表示基于 HMAC 算法加密的一次性密码。是事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过 HASH 算法运算出一致的密码。
全栈程序员站长
2022/11/17
1.5K0
动态令牌_创建安全令牌
本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
因为要更新数据库加个表,远程桌面又无法连接。。。所以就远程到另外一台电脑,然后用navicat通过内网修改目标数据库。
木子墨
2018/09/13
2.9K0
本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
Rest API: Json参数格式错误时显示Json原文
一开始想寻找其他方式,当抛出异常的时候,就从HttpServletRequest读取body内容。但是做不到,因为在做Json读取的时候,InputStream已经被读取了,无法再次获取到body内容。所以只能通过自定义MessageConverter的方式。
十毛
2019/03/27
1.9K0
令牌模拟
在入侵过程中,令牌盗窃和用户冒充可以提供很大帮助,节省我们大量时间并帮助我们尽可能保持隐秘,仅使用 Microsoft Windows 操作系统本身提供的功能和工具。
Khan安全团队
2022/01/18
1.3K0
【React 错误处理】 ---- Error: Minified React error #185;
1. 报错信息 Error: Minified React error #185; visit https://reactjs.org/docs/error-decoder.html?invarian
Rattenking
2022/01/06
3.2K0
【React 错误处理】 ---- Error: Minified React error #185;
React 17 要来了,非常特别的一版
React 最近发布了v17.0.0-rc.0,距上一个大版本v16.0(发布于 2017/9/27)已经过去近 3 年了
ayqy贾杰
2020/08/25
1.6K0
React 17 要来了,非常特别的一版
【深度知识】JSON Web令牌(JWT)的原理,流程和数据结构
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理,用法和详细的数据结构。
辉哥
2019/07/10
29K0
【深度知识】JSON Web令牌(JWT)的原理,流程和数据结构
点击加载更多

相似问题

JSON分析错误: react本机中未识别的令牌“<”

12

响应本机JSON分析错误:无法识别的令牌'<‘

11

JSON分析错误:角中未识别的令牌“<”

24

如何解决警告"JSON分析错误:未识别的令牌'<'"?

12

JSON解析错误:未识别的令牌<

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文