小编los*_*ost的帖子

端口和适配器/六边形体系结构 - 术语和实现的说明

在阅读了有关Ports和Adapters架构的不同来源(包括Alistair Cockburn的原始文章)后,我仍然不确定术语"端口"和"适配器"的确切含义 - 特别是在将这些概念映射到实现工件时.

几个来源(例如这篇文章)暗示这种体系结构模式中的端口是外部的工件,其次是中间层中的适配器,它们在端口和处于核心的应用程序之间进行转换.

但是,在Cockburn的原始文章中,端口出现在适配器层的外部和内部,具体取决于通信方向:

  • 入站通信:" 当事件从外部世界到达端口时,特定于技术的适配器会将其转换为可用的过程调用或消息,并将其传递给应用程序. "
  • 出站通信:" 当应用程序发送内容时,它会通过端口将其发送到适配器,从而创建接收技术所需的适当信号(人工或自动). "

实际上对我来说,"全部外部"方法和"内部和外部"方法都没有意义 - 我会将端口看作始终放在应用程序旁边的工件,而不管通信方向如何.Imo这也与端口适配器的比喻一致:E.g.有一个带有串行端口的设备,要连接另一台没有串口的设备,我需要一个适配器,从我的设备的角度来调整入站和出站通信.

来到这个体系结构的实现,我会看到端口的定义,而不是作为我的应用程序的一部分,我会看到不同的适配器是我的应用程序的"外部".E. g.单个端口的实现可以包括facade(由适配器调用以进行入站通信)和interface(由适配器实现用于出站通信).

术语端口适配器的正确含义是什么?如何将这些概念映射到实现工件?

更新:

发现这篇文章类似于我的理解.如果存在某种共同协议,问题仍然存在.

architecture hexagonal-architecture

28
推荐指数
3
解决办法
9817
查看次数

我应该使用带有backbone.js的中央事件总线吗?

我目前正在开发我的第一个backbone.js应用程序.事件的概念对我来说非常熟悉,但如果我应该使用中央事件调度员,我有疑问.一般来说,我看到这两种方法:

  • 直接将事件发布者和事件接收者连接在一起.(我从这种方法开始.)
  • 使用事件总线并将发布者和接收者连接到此总线.

在应用程序的长时间可维护性和事件的可追溯性方面,使用事件总线是否有利?

event-handling backbone.js

8
推荐指数
1
解决办法
4531
查看次数

Apache Camel JMS - 异常未通过请求/回复返回给调用者

我用Apache Camel和JMS创建了一个简单的请求/回复设置.一切正常 - 调用被分派到服务器端服务,结果返回给客户端.只有在服务器端出现异常时,才会将此异常返回给调用者.服务器上出现异常,客户端收到超时.我想在客户端收到例外.

据我了解的可用文档,我想要的应该是默认行为.我也玩过onException子句或为后传传递设置另一条路线,但所有这些都没有帮助.所以我的问题是我在设置中缺少什么来将异常返回给调用者?

以下是详细信息(代码简化):

  • 用于通信的JMS队列部署在独立的JBoss(7.1.1.FINAL)中
  • JNDI用于查找Factory以创建与队列的连接
  • 客户端目前是在Jetty中运行的Spring Web应用程序
  • 该服务器目前是一个使用Spring配置的简单独立Java应用程序
  • Spring版本3.1.2.RELEASE
  • Apache Camel 2.10.2

客户端和服务器之间交换的DTO/Exception:

public class RequestDTO implements Serializable {
    String payload;
    ...
}

public class ResponseDTO implements Serializable {
    String payload;
    ...
}

public class RmtServiceException extends Exception implements Serializable {
    public RmtServiceException() {
        super("Exception in service.");
    }
}
Run Code Online (Sandbox Code Playgroud)

通过JMS调用的服务接口:

public interface RmtService {
    ResponseDTO doSomething(RequestDTO request) throws RmtServiceException;
}
Run Code Online (Sandbox Code Playgroud)

服务的实施:

@Component("rmtService")
public class RmtServiceImpl implements RmtService {
    public ResponseDTO doSomething(RequestDTO request) throws RmtServiceException {
        // Return …
Run Code Online (Sandbox Code Playgroud)

java jboss spring jms apache-camel

6
推荐指数
1
解决办法
5713
查看次数

为什么调用错误或在BodyParser的Iteratee中完成请求在Play Framework 2.0中挂起?

我试图了解Play 2.0框架的反应I/O概念.为了从一开始就更好地理解,我决定跳过框架的助手来构造不同类型的迭代,并Iteratee从头开始编写一个自定义BodyParser来解析请求体.

IterateesScalaBodyParser文档中提供的信息开始,以及关于播放被动I/O的两个演示文稿,这就是我想出的:

import play.api.mvc._
import play.api.mvc.Results._
import play.api.libs.iteratee.{Iteratee, Input}
import play.api.libs.concurrent.Promise
import play.api.libs.iteratee.Input.{El, EOF, Empty}

01 object Upload extends Controller {
02   def send = Action(BodyParser(rh => new SomeIteratee)) { request =>
03     Ok("Done")
04   }
05 }
06
07 case class SomeIteratee(state: Symbol = 'Cont, input: Input[Array[Byte]] = Empty, received: Int = 0) extends Iteratee[Array[Byte], Either[Result, Int]] {
08   println(state + " " + input + " " + received) …
Run Code Online (Sandbox Code Playgroud)

scala playframework iterate playframework-2.0

5
推荐指数
1
解决办法
1506
查看次数