问题标签 [application-layer]

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 回答
1228 浏览

controller - 控制器适合分层架构/DDD 的哪一层

所以,我在这里看到了一些关于它的问题,但没有一个是具体的,也没有回答我的疑问。

在分层架构/DDD 应用程序中,控制器(常见 MVC 应用程序中的“C”)适合哪一层?我在不同的地方读到它可能在 UI 层或应用程序层,但我仍然无法理解什么是正确的层。

我正在阅读 Eric Evans 的 DDD,直到我读到这本书的时候我还没有弄清楚。我注意到他说如果 UI 层不复杂,您可以将其与应用程序层合并。这会对控制器产生同样的影响吗?

0 投票
1 回答
318 浏览

event-handling - 使用域事件 (DDD) 在聚合之间进行通信的责任

一般问题:谁负责处理单个命令中包含的事件?

简化示例

给出了两个聚合:UserGame

要使用 - 命令启动 a GameStartGame两个Users 都必须接受。就我的域驱动解决方案而言,这会导致以下事件流:GameRequested->UserAcceptedUserRejected->GameStartedGameFailed

此事件流和相应的业务逻辑代码是领域的一部分,因此我想在领域层中规定该行为。但我经常看到应用程序层在聚合上完成所有事件处理和执行行为以弥合差距。应用程序层是否真的负责确定接下来必须调用哪个聚合(以及如何调用)以执行此GameStart命令过程(跨越多个聚合和事件)?

0 投票
2 回答
737 浏览

user-interface - 用例到命令/应用层映射:实现

我读过的一些关于 DDD 的文章表明,应用层中的应用服务或命令 (CQRS) 密切反映了特定的用例。

对于简单的用例,这种映射是有意义的,但在需要多个用户交互的更复杂的实例中,我试图了解如何映射 API 的课程粒度级别,而不将应用程序逻辑推送到 UI 中。

示例: - 想象一个应用程序服务:

  • 从系统/用户界面的角度来看,在导入产品数据时,我们要检查是否有任何产品已经存在,如果存在,则在继续之前提示用户是否要继续。

我常用的方法:扩展 API 以包括:

如果返回 true,则提示用户是否要继续,然后调用。

我的问题是这是否会将大部分应用程序逻辑转移到 UI 层?(即UI现在控制是否可以覆盖产品,以及在导入产品数据之前是否应检查现有产品等)

如果是,我无法想象应用程序层和域层将如何处理这个问题?除了:

来电:

如果失败,检查失败的原因,如果由于产品已经存在,提示用户并再次调用:

这感觉就像做与上述相同的事情的不同方式。

这可能看起来有点迂腐,但我正在努力使表示层 (MVC) 尽可能轻薄。

关于任何更优雅的解决方案的想法?


0 投票
2 回答
799 浏览

asp.net-mvc - 更改 AsyncCrudAppService 中 GetAll 方法的输出 DTO(返回值)

AsyncCrudAppService在我的 AppServices 中使用 ABP。这是我的界面:

和服务:

现在,我相信所有这些标准 CRUD 方法都将返回默认类型(AssetRequisitionDto在我的情况下)。但是,我想做的是为Get()GetAll()方法返回不同的类型。

Get()应该有一个更详细的 DTO,其中包含 Navigation 道具的子属性。但是GetAll()应该有一个不那么详细的,只是为了填充一个表格。

有没有办法以某种方式覆盖返回类型?

0 投票
0 回答
110 浏览

omnet++ - OMNET++:INET 4.0 如何在app层获取信标帧信号功率?

我正在INET为 OMNET++ 使用 4.0 框架,并且我正在尝试获取接入点在我的 AdhocHost 应用层发送的信标帧的接收信号功率。
我很清楚可以SignalPowerInd为此目的使用标签,但是,我如何修改我的 mac 层以允许将信标帧(或至少它们的 RSS 值)传送到我的应用程序?

0 投票
1 回答
46 浏览

amazon-web-services - 允许/限制 AWS 安全组中的应用程序协议,如 ampq、mongodb、HTTP 等

我只想在我正在运行的 EC2 实例上允许/禁止某些应用程序协议,例如 HTTP、mongodb、ampq 等。
我可以看到我们可以更改安全组的入站和出站规则。但是,它只能打开或关闭 TCP 端口(传输层协议),而不能限制应用层协议。我为两件事寻求帮助:

  1. 了解在云上您是否可以
    通过安全组实际允许/限制应用程序协议。或者这是我应该照顾我的应用程序本身的事情?
  2. 假设我的 EC2 上运行了一些 mongodb 实例。限制入站 mongodb:// 协议实际上会让我的 mongodb 和 EC2 更安全吗?
0 投票
1 回答
199 浏览

sockets - 使用套接字时使用的是什么应用层协议?

使用 Web 浏览器时,使用的应用层协议是 HTTP。虽然我经常使用套接字来创建与服务器的连接并传递字符串,但 Python 中经常使用的示例可能是

'hello'使用这个基本示例发送字符串时使用的是什么应用层协议?

0 投票
0 回答
29 浏览

http - 数据中使用的协议是如何编码的?

我正在阅读这个 SO question的答案,解释防火墙如何根据发送的协议数据(例如 FTP 与 HTTP 等)采取某些行动。此外,路由器将根据它是 UDP 端口 X 还是 TCP 端口 X 对数据进行不同的重新路由。

1)是否有一个标准来编码在数据本身中发送的协议数据?

2) 消息中是否编码了所有层(OSI 模型中的 1-7 层)的协议,还是仅编码某些层,例如传输层和应用层?

0 投票
0 回答
285 浏览

c# - UDP 数据包总是到达传输层(由wireshark 检测到),但并非总是被应用程序读取

语境

我一直在创建一个系统,其中覆盆子 PI 将图像实时发送到远程客户端。覆盆子 PI 使用覆盆子 PI 相机捕获图像。捕获的图像可用作所有像素(行、列和 rgb)的 3 维数组。通过非常快速地发送和显示图像,它将以视频的形式呈现给用户。

我的目标是以尽可能高的图像分辨率实时发送这些图像。可接受的帧速率约为 30 fps。我选择了协议 UDP 而不是 TCP。我这样做是因为数据可以在 UDP 中传输得更快,因为开销更少。没有必要重新传输单个数据包,因为在我的情况下丢失一些像素是可以接受的。覆盆子 PI 和客户端位于同一网络中,因此无论如何都不会丢弃很多数据包。

考虑到以太网层的最大传输单元(MTU)为1500字节,UDP数据包不应该被分片或丢弃,我选择了最大有效载荷长度为1450字节,其中1447字节为数据,3字节是应用层开销。剩余的 50 个字节保留用于 TCP/IP 和传输层自动添加的开销。

我提到捕获的图像可作为数组使用。假设这个数组的大小例如是 1.036.800 字节(例如 width=720 * height=480 * numberOfColors=3),那么需要 717 (1.036.800 / 1447) 个 UDP 数据包来发送整个数组。树莓派上的 c++ 应用程序通过将数组分割成 1447 字节的片段,并添加一个介于 1-717 之间的片段索引号作为数据包的开销来实现这一点。我们还添加了一个图像编号,以区别于之前发送的图像/数组。数据包看起来像这样: udp 数据包

问题

在客户端,我开发了一个 C# 应用程序,它接收所有数据包并使用包含的索引号重新组合数组。使用 EgmuCV 库,接收到的数组被转换为图像并在 GUI 中绘制。然而,一些接收到的图像是用黑线/块绘制的。调试的时候发现,这个问题不是绘制图像引起的,而是黑色的块其实是缺少了从未到达的数组片段。因为数组中的字节值默认初始化为0,所以缺失的片段显示为黑色块

调试

在客户端使用 Wireshark,我搜索了这样一个丢失片段的索引,并惊讶地发现它完好无损。这意味着数据在传输层上被正确接收(并被wireshark观察到),但从未在应用层上读取。

此图像显示在索引 174.000 处缺少接收到的数组的一个块。因为一个数据包中有 1447 个数据字节,所以这个丢失数据的索引对应一个片段索引为 121 (174.000/1447) 的 UDP 数据包。121 的十六进制等效值为 79。下图显示了在 Wireshark 中对应 UDP 数据包的数据包,证明数据在传输层上仍然完好无损。图片

到目前为止我尝试了什么

  1. 当我降低帧速率时,黑色块会更少,而且它们通常更小。以 3FPS 的帧速率,根本没有黑色。然而,这个帧速率是不希望的。这是大约 (3fps * 720x480x3) 3.110.400 位每秒 (379kb/s) 的速度。一台普通的计算机应该能够每秒读取比这更多的位。正如我所解释的,数据包 DID 到达了 Wireshark,只是在应用层没有读取它们。

  2. 我还尝试将 UDP 有效负载长度从 1447 更改为 500。这只会使情况变得更糟,请参见图片

  3. 我实现了多线程,以便在不同的线程中读取和处理数据。

  4. 我尝试了一个 TCP 实现。图像被完整接收,但速度不够快,无法实时传输图像。

值得注意的是,一个“黑色块”并不代表一个 1447 字节的缺失片段,而是许多连续的片段。因此,在读取数据的某些时候,不会读取许多数据包。也不是每个图像都有这个问题,有些是完好无损的。

我想知道我的实现有什么问题导致这种不良影响。所以我将在下面发布我的一些代码。请注意,从未真正抛出异常“SocketException”,也从未打印过“无效开销”的 Console.Writeline。_client.Receive 总是接收 1450 个字节,除了数组的最后一个片段,它更小。

除了解决这个错误,如果有人有其他建议以更有效的方式传输这些阵列(需要更少的带宽但没有质量损失),我很乐意听到。只要解决方案在两个端点上都将数组作为输入/输出。

最重要的是:请注意,UdpClient.Receive() 方法从未返回丢失的数据包。我没有发布在树莓派上运行的 c++ 应用程序的代码,因为我已经证明了数据确实到达(在 wireshark 中)。所以传输工作正常,但接收不是。

0 投票
1 回答
36 浏览

java - 如何从 TCP 访问有关网络的信息?

我正在用 Java 编写应用层协议。它基本上只是传输文件。如果传输无法完成或客户端与服务器之间的连接中断,我希望它生成错误消息。

有没有办法从 TCP 获取有关连接或传输状态的信息?还是我需要依赖我在应用程序层使用的东西?如果我可以从 TCP 访问信息,如何?