问题标签 [architectural-patterns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
105 浏览

javascript - Javascript:在函数中混合异步与同步(缓存和 Ajax 请求)

我试图弄清楚如何从一个看起来像这样的函数混合 2 个不同的返回(异步/同步):

如您所见,我正在使用 React 来处理我的请求,我的目标是从缓存中获取数据而不是使其在线。现在我对我的函数有一个特殊性,我使用了 2 个嵌套的 axios.get('http://...')。

所以我的情况是:

我希望能够将我的 GET 调用放入一个函数中,但不确定如何做到这一点并同时处理不同的返回调用。

任何人的想法?

0 投票
1 回答
29 浏览

spring-boot - 在 Rest Call 之后发生 DB Call 时的事务问题

我正在使用Spring Boot我的应用程序现在只是 Monolithic,以后可能会切换到微服务。

场景 1:我的数据库调用不依赖于 REST 响应

场景 2:我的数据库调用取决于 REST 响应

在场景 1 的情况下,我没有任何问题,因为数据库会在 REST 失败的情况下回滚。

但是,在场景 2 的情况下,REST 调用不能回滚,以防数据库调用发生任何异常。

我已经在谷歌上搜索了上面的内容,我发现了一些解决方案,比如我们需要使用 Pub-Sub 模型系统之类的东西,但我无法清楚地理解这个概念。

如果有人能够为场景 2 提供解决方案,我会很高兴。其他电子商务企业如何有效地处理他们的交易,我想我的查询与一些架构设计有关。请建议一些好的架构方法来解决上述交易问题。你认为使用像 Kafka 这样的消息系统可以解决上述问题吗?仅供参考,目前,我的应用程序是单体的,我应该使用微服务吗?我是否需要使用两阶段提交或 Sagas 会解决我的问题?Sagas 是否可用于 Monolithic 应用程序?

编辑: 关于 RestCall:我实际上是在使用 BrainTree 进行 Real Transaction,这是一个 Rest Call。

0 投票
1 回答
762 浏览

node.js - NestJS:在哪里放置文件阅读器?

我有一个关于 NestJS 的架构问题。假设我有一个 ContentModule 和一个 BlueprintModule,两者都需要读取 json 文件。在这两种情况下,我都会有一个服务来调用存储库,而不是读取这些文件。这个存储库现在应该使用类似 FileReader 类的东西。

我会把它放在 NestJS 的什么地方?我应该为此创建一个新模块并将其注入 ContentModule 和 BlueprintModule 吗?我有点困惑,因为我认为这更像是一个实用程序而不是一个功能模块。utils我应该只在orlib文件夹中创建一个简单的类吗?

如果我没有数据库,而是从我的 BlueprintService 和 ContentService 访问 JsonService,我会创建一个存储库吗?

有什么想法吗?

0 投票
1 回答
771 浏览

networking - 微服务扩展/插件架构

我们正在构建一个基于微服务的平台。该平台将提供许多将在各种独立项目中使用的基本功能。我们需要提出这样的架构,使我们能够扩展基本功能并与现有服务进行交互。主要任务是保证主要服务的代码不变,基于平台的定制解决方案可以很方便的复用。

我们正在考虑几种选择。例如,有一个服务“foo”提供了函数 foo1 和 foo2。扩展功能,我们可以创建一个独立的“foobar”服务,放在foo服务前面,接受API请求,执行自定义函数,然后将请求重定向到foo。它变成了一种中介服务,它充当特定项目和主平台特定功能实现的主要环节。这种方法的优势可以归因于完全独立于基本服务的代码库。而主要的缺点是实现的复杂性和需要将主要服务的功能大大碎片化。

在此处输入图像描述

正在考虑的第二个选项类似于单体应用程序中经常使用的方法 - 挂钩系统,它允许您覆盖系统的行为。例如,您可以创建一个独立的服务来连接事件和订阅者。这种方法比较灵活,但同时实施起来还是相当困难的。这种方法的主要缺点是同步阻塞网络调用。

在此处输入图像描述

我们正在考虑的第三个选项是微服务本身的构建,以便可以向其中添加额外的模块,以便可以在构建阶段定制服务。主要代码保持不变,但在流程内部,已经提到的钩子和事件方案被实现(在各个服务的代码级别)。好处是易于实施。缺点是在涉及多个服务的情况下很难实现定制。

在此处输入图像描述

也许我们正在尝试发明一辆自行车,并且存在针对该问题的良好解决方案。如果您知道,或者您对解决此问题的可能方法有很好的想法,请分享。

0 投票
1 回答
58 浏览

rest - 关于微服务模糊边界

我正在阅读Chris 的微服务模式。在他的书中,他举了一些我无法理解的例子section 5.2.1. The problem with fuzzy boundaries

这是在线阅读的链接。有人可以查看第 5.2.1 节并帮助我了解模糊边界的确切问题吗?

我没有清楚地了解以下声明:

在这种情况下,Sam 将订单总额减少了 $X,而 Mary 将订单总额减少了 $Y。结果,订单不再有效,即使应用程序在每个消费者更新后验证订单仍然满足订单最小值

在上述声明中,有人可以解释一下,为什么订单不再有效?

0 投票
1 回答
45 浏览

.net - 带有 Windows 服务的架构模式

我是新手,我总是在没有任何架构的情况下简单地编写代码,可以这么说。我的任务是创建一个小型Windows 服务项目(服务每小时连接到 API,获取一些信息并将其写入事件日志)。我已经做到了,它工作得很好,但我必须考虑这个项目的架构

到目前为止,我只有MyNewService.cs和所有需要的方法,如 OnStart、OnTimer 等,但不幸的是它是不可接受的。我只知道 MVC 模式,但我不知道如何“实施”模式来进行项目。我的意思是,例如,当我创建 ASP.NET 项目时,MVC 模式已经存在。此外,MVC 是关于一些视图等等,所以我真的很困惑它应该如何与 Windows 服务一起工作:c 但我想这是可能的......

请帮助:f

0 投票
6 回答
318 浏览

java - 构造函数重载java以外的最佳实践/设计模式

我有一个有多个构造函数的类。每个代表不同的用例。

到目前为止,构造函数重载是干净的解决方案,直到我遇到来自 java 编译器的相同擦除问题。例如,我想添加另一个最终具有相同擦除的构造函数,所以我只是选择包含一个默认参数来暂时解决,如下所示:

但是我有一种强烈的感觉,可能有这么多的构造函数对于这个用例来说不是一个好的设计模式。也许有一个更好的解决方案或最佳实践设计模式用于这种场景。我正在查找构建器模式,但不确定这是否正确/更好。有什么建议吗?

0 投票
0 回答
78 浏览

oop - 双向类关联不好吗?

我正在开发一种工具,并注意到我的课程使用“双向关联”。A 类的对象有一个指向 B 的指针,而 B 有一个指向 A 的指针。我试图找出这是一个糟糕的设计架构,还是没问题,但没有找到任何东西。

那么,这有多糟糕?

0 投票
0 回答
19 浏览

html - 静态网站是否符合任何架构模式的标准?

我担心静态网站(如仅包含 HTML 文件的单页)、由文件服务器托管、可通过某些 DNS/IP 地址获得的静态网站是否符合架构模式的任何标准(来自 MVC、Singleton 等组)?如果它可能是客户端 - 服务器模式,我有复杂的感觉?还是只是简单的文档,我们可以通过发送适当的请求来查看?我想知道我提到的那两个是来自同一个家庭,还是我失去了地面并做了一个图案冰沙?

感谢您的回答。

0 投票
2 回答
56 浏览

javascript - 最佳方式从一组对象中设计和生成唯一字符串以进行映射

我要解决的问题是如何最好地从一组问题/答案字符串中生成唯一的字符串。

假设最终用户填写问卷并回答以下问题:

我需要生成一个代表这些问题和答案的字符串,然后将其映射到 templateId 以发送模板化消息。

我考虑过简单地运行一个 foreach 并将所有问题和响应添加在一起,但问题是如果问题和答案发生变化或添加了我们不感兴趣的其他问题以用于发送消息目的。

我应该使用 find 或 hashtable 类型的查找来代替,所以我只选择我需要的问题。我也有点担心这里的表现,但这应该没什么大不了的,因为这组问题/答案应该保持相对较小。

我也想知道这个字符串 - > templateId 映射,存储这些信息的最佳方式是什么,一个简单的对象可以正常工作吗?

澄清:

它不必是唯一的或哈希图。基本上我们在后端有电子邮件模板来发送消息。在前端,我们需要根据对问题的一组回答来确定使用哪个电子邮件模板。所以我的简单解决方案是将问题/答案附加在一起以生成一个字符串,即"isThereProblemYesWhatisIt?ProductDamagedDoyouwantaRefund?Yes"

即后端可用的模板:

在前端创建的映射。

谢谢