什么是Hexagon设计模式

时间:2014-05-13 09:25:01

标签: design-patterns

我一直在看这个https://plus.google.com/events/ci2g23mk0lh9too9bgbp3rbut0k

他们提到了一个我不熟悉的术语

海克斯康的设计模式是什么?

5 个答案:

答案 0 :(得分:29)

来自http://alistair.cockburn.us/Hexagonal+architecturehttps://github.com/jschairb/sandbox/wiki/HexagonalArchitecture

  

六边形体系结构是通过建立一个体系结构来定义的体系结构   围绕应用程序域的边界并建立   用于输入/输出交互的适配器。通过建立这种隔离   层,应用程序变得不知道事物的本质   它与...互动。

     

创建您的应用程序,无需UI或数据库即可工作   你可以对应用程序运行自动回归测试,工作   当数据库变得不可用时,将应用程序链接在一起   没有任何用户参与。 - Alistair Cockburn

答案 1 :(得分:10)

您是在参考六角形设计模式吗?

六角形设计模式的意图

允许应用程序同样由用户,程序,自动化测试或批处理脚本驱动,并与最终的运行时设备和数据库隔离开发和测试。

当事件从外部世界到达端口时,特定于技术的适配器会将其转换为可用的过程调用或消息,并将其传递给应用程序。该应用程序对输入设备的性质一无所知。当应用程序发送内容时,它会通过端口将其发送到适配器,从而创建接收技术(人工或自动)所需的适当信号。该应用程序与其所有侧面的适配器进行语义上的声音交互,而实际上并不知道适配器另一侧的物体的性质。

Read more about it at here

此处文章的备份版本:https://staging.cockburn.us/hexagonal-architecture/

答案 2 :(得分:2)

这更像是整体系统设计。您基本上希望您的代码对所有人都同样友好。

为了支持这一点,例如,webservices符合标准,并且通常普遍支持JSON。为什么? Web客户端有各种形式,因此遵循标准可以让您的客户轻松集成。 JSON更进了一步:它使得在顶层放置UI无痛。

从技术角度来看,您无法完全构建面向未来的服务。只需确保服务的目标清晰/干净且符合目的。如果该目的不再适用,那么您需要(a)新服务

这说起来容易做起来难。当你为了权宜之计而开始倾斜你的老板以妥协这些原则时,你就必须做你必须让他/她脱离困境的事情。但是,黑客已经完成,结果通常是服务采用永久最终拥有的无关逻辑。

如果您可以将一个原则推进到您的系统设计中,那就是: 打开扩展程序。已关闭以进行修改

答案 3 :(得分:2)

从我的理解中,它对于关注点分离的一般软件工程实践来说有点嗡嗡声。它基本上表明你的i / o逻辑应该隐藏在你的域逻辑中。因此,您的核心业务逻辑可以适应不同的“用户”。它与MVC模式密切相关。

我认为“六角形建筑”的名称刚刚由提交者组成。有些人正在接受它。

答案 4 :(得分:-2)

八角形

for (int i = 1; i <= 17; i++) {
    for (int j = 1; j <= 17; j++) {
        if (i == 1) {
            if (j > 6 && j < 12)
                mtextView.append("* ");
            else
                mtextView.append("   ");
        } else if (i > 1 && i < 7) {
            if (j == 9 - (i + 1) || j == 9 + (i + 1))
                mtextView.append("*");
            else
                mtextView.append("   ");
        } else if (i >= 7 && i <= 11) {
            if (j == 1 || j == 17)
                mtextView.append("*");
            else
                mtextView.append("   ");
        } else if (i >= 12 && i <= 16) {
            if (j == i - 10 || j == 18 - (i - 10))
                mtextView.append("*");
            else
                mtextView.append("   ");
        } else if (i == 17) {
            if (j > 6 && j < 12)
                mtextView.append("* ");
            else
                mtextView.append("   ");
        }
    }
    mtextView.append(Html.fromHtml("<br>"));
}