问题标签 [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 投票
1 回答
280 浏览

java - Apache Camel 中 Camel Context 之间的同步通信

在上一个项目中,我能够使用direct:vm组件,我认为这是解决我的任务的最佳组件。不幸的是,现在我无法使用它,因为我仅限于 ServiceMix 的 Camel 版本,即 2.6.0-fuse-00-00,所以我找到了标准化消息路由器 ( NMR )。我发现 NMR 在默认情况下是异步的,但可以通过参数同步设置为同步。使用它而不是direct:vm组件仍然是一个很好的解决方案吗?我将它与丰富的组件一起使用,我没有发现任何问题。

0 投票
3 回答
1806 浏览

multithreading - 在返回值的函数中进行多线程处理的最佳实践,Swift

我有一个问题可能不是专门关于实施的,而是一个提示/最佳实践的问题。

我正在用 Swift 编写一个类,该类从在线源以 JSON 格式获取数据。我想在这个类中有特定的方法来连接到在线资源并以 Dictionary 类型返回结果。函数可能是这样的:

我现在在这个实现中得到的,没有多线程,resultList显然是在从在线源获取完成之前返回的。毫不奇怪,它会导致程序失败。

有什么想法或提示我可以实现相反的效果吗?在这种情况下,我对多线程有点困惑,因为我想稍后从另一个类异步调用这个公共方法,我知道如何做到这一点,但我不知道如何使返回参数的方法具有多线程本身。

或者它根本不是关于多线程的,我在这里没有看到明显的解决方案?

0 投票
1 回答
345 浏览

java - 如何使用 ormlite 跟踪进行了数据库更改?

我正在使用com.j256.ormlite包。

我的目标是拥有一个工作数据库文件和一个用户可以使用 UI 按钮保存的文件。为了达到这个目标,我打算在数据库抽象层跟踪工作文件的变化,并在用户关闭程序时通知用户有未保存的数据。

我如何跟踪是否进行了更改?

我的第一个直觉是为 Dao 接口编写一个装饰器,并将 Dao Creation 包装在一个使用我的装饰器的方法中。

装饰器可以修改所有更新和删除方法。但是dao似乎支持事务,并且似乎是一个复杂而冗长的接口。

你会如何最好地解决我的问题?

0 投票
1 回答
628 浏览

winforms - 用于多表单 winforms 桌面应用程序的实体框架

我正在开发基于 winforms 和 EF 的桌面应用程序。

目前我对 EF 和架构有一些问题:

  1. 同步数据。有多个表单,每个表单都使用它自己的数据库上下文实例。当在一个表单上更新数据时,我需要在其他表单上手动更新它。有很多不灵活的回调和复制粘贴来刷新数据。

  2. 有一些计算在客户端运行并更新大量记录。有时用户需要保存它,而使用 EF 需要很长时间。因此,它也在单独的上下文中运行,因此不会阻止与其他实体的工作

  3. 有带有绑定实体的 DataGridViews 并且有 和 有烦人的DbSet<T>.Local问题DbSet<T>.ToList()。当gridview中的数据被保存时,它有时不会在其他地方更新。

我正在寻找可以在那里使用的任何最佳实践和灵活模式。另外,期待听到那些解决同样问题的人的意见。

谢谢

0 投票
2 回答
56 浏览

ios - 在 iOS 开发中使用 Views 的正确方法是什么?

我有一个自定义视图。它有一些像这样的条件(仅示例):

然后我可以将此视图添加到我的ViewController

我想知道我该怎么做?编写这样的条件,或为此目的制作单独的视图。就像是:

视图1

视图2

并在 ViewController 中添加其中之一:

在什么情况下创建什么样的视图更好,我应该如何决定这种事情?如果它是真实的,我需要一些非常广泛的答案和解释。

0 投票
2 回答
278 浏览

c++ - 将状态对话框添加到 Qt 项目

我正在制作能够根据给定密码 Cryptofm 加密和解密文件/文件的开源文件管理器。您可以从这里获取代码- 第一个版本。我想添加状态对话框,表示带有进度条的加载屏幕Dialog::encAll(),在进度条达到最大值后关闭状态对话框。我发现我必须首先递归地找到文件夹中所有文件的总大小(在 TreeView 上下文菜单选项大小中) - 插槽Dialog::dirSize()是在函数的帮助下做到这一点的Dialog::getSelectedTreeItemSize(),然后将进度条属性最大值设置为该值。总大小计算过程可能会再次花费大量时间,因此我需要另一个对话框,其中包含移动内容以指示该过程正在执行。整个过程应该类似于在 Windows 7 中粘贴包含大量文件的超大文件夹的过程。

获取总大小的过程:

在此处输入图像描述

粘贴直到进度条达到总大小的过程:

在此处输入图像描述

问题是几乎所有功能、动作等都在 Dialog 类中实现,我无法使用线程 -Dialog : public QDialog, public QThread在 dialog.h 中添加这样的 QThread 之后(能够实现 run() 方法)程序给出了一些错误:

C:\Users\niki\Documents\EncryptionProject\dialog.cpp:41:错误:C2594:'argument':从 'Dialog *const' 到 'QObject *' 的模糊转换

C:\Users\niki\Documents\EncryptionProject\dialog.cpp:46: error: C2594: 'argument' : 从 'Dialog *const' 到 'QObject *' 的模糊转换

C:\Users\niki\Documents\EncryptionProject\dialog.cpp:51:错误:C2385:“连接”的模糊访问可能是基础“QObject”中的“连接”,也可能是基础“QObject”中的“连接”

还有另外 31 个错误,所以:

  • 这里最好的选择是什么?
  • 我应该使用 MVC 还是其他模式?
  • 我应该使用线程吗?
0 投票
1 回答
538 浏览

c# - DDD 中基于时间/日期的域事件的模式

我正在研究一个用户故事,其中创建了一个任务(一个实体),供用户在日期过期且满足其他条件时处理(在一个单独的实体上 - 比如说一个产品)。

理想情况下,我希望在此“日期”过期时实时创建域事件 - 但是我无法在代码中使用任何触发器来执行此操作。我目前只能真正看到一种要使用的模式 - 即拥有一个每小时轮询一次的 Windows 服务(例如使用 Topshelf / Quartz),使用产品存储库拉回所有记录,然后编写代码以检查是否日期是否过期且是否符合标准。如果成功,将触发领域事件并创建任务。

你可以想象,我不是特别喜欢这个。它不是实时的,我正在拉回大量数据以实现相对简单的事情。我在这里错过了一个技巧吗?某种状态机/工作流程?在这种情况下,我可以使用哪些架构模式/好的设计?

如果问题有点含糊,我深表歉意,如果需要,我会尝试澄清。

0 投票
6 回答
11450 浏览

android - Confusing term Interactors in Clean Architecture

As per clean architecture, design Interactor is part which contains all business logic. The term Interactor is quite confusing to me. Interactor seems to me like interacting between two different layers like data and presenter.

Is it the right term to use? Can anyone please clear the purpose of Interactor? Which pattern does it follow? If Interactor is not what it seems to me then what is the design pattern for layer-layer interaction?

0 投票
1 回答
1314 浏览

java - Android良好的架构

我有兴趣探索 Android 应用程序的良好架构模式。

我用 VIPER 和一般的清洁架构方法做了几个实验,但我想从你们亲爱的 SO 研究员那里得到一些好的材料/想法来研究。

以下是一些应该反映的要点:

  1. 它应该有助于处理典型的单个活动/多个片段应用程序中的路由/导航

  2. 它应该清楚地区分哪些组件/层将在后台线程上运行,哪些在主线程上运行,以及在层之间进行通信(观察者模式、事件总线或其他)

  3. 它使用有限数量的第三方库,如果使用,请说明利弊(例如 Dagger for Dependency Injection)

  4. 从长远来看,它有助于在适应/扩展应用程序时保持正交性。一个模块的更改应该影响最少数量的组件,而不会产生级联效应,因为组件是大腿耦合的。

  5. 如果能在 github 或其他任何地方查看真实示例/原型以使其真实和实用,而不会在学术方面过多,那就太好了;-)

提前感谢任何很酷的想法/模式

0 投票
2 回答
63 浏览

java - 应该使用什么模式或技术从事件生成报告?

假设有一个系统在发生某些事情时会填充数据库中的行:

  • 当用户简单地登录时,会在数据库中插入一行,其中登录类型和时间在表中user_logins
  • 当操作员向用户拨打电话时,在表中的数据库中插入带有操作员 ID、用户 ID 和日期的行outgoing_calls
  • 当操作员不接听用户呼叫时,将带有日期、用户 ID 和呼叫类型的行插入到数据库中

然后在某个时间段结束后,比如一个月,我们需要一个关于谁打电话给谁,多少电话没有接听等的报告。应该使用什么模式来组织这个功能?

乍一看,这个过程似乎记录了很多,但记录是我们以某种格式(date-processId-messageWithPlaceHolders)存储消息时的过程。因此,为此使用日志系统不是很合适。

从另一个角度来看,它看起来像事件处理,但是当“事件”发生时不需要做任何动作,没有监听器,没有队列。只需存储到数据库以供进一步报告。

那么应该使用什么模式或技术来有效地实现这个功能呢?