答案 0 :(得分:29)
来自http://alistair.cockburn.us/Hexagonal+architecture和 https://github.com/jschairb/sandbox/wiki/HexagonalArchitecture
六边形体系结构是通过建立一个体系结构来定义的体系结构 围绕应用程序域的边界并建立 用于输入/输出交互的适配器。通过建立这种隔离 层,应用程序变得不知道事物的本质 它与...互动。
创建您的应用程序,无需UI或数据库即可工作 你可以对应用程序运行自动回归测试,工作 当数据库变得不可用时,将应用程序链接在一起 没有任何用户参与。 - Alistair Cockburn
答案 1 :(得分:10)
您是在参考六角形设计模式吗?
六角形设计模式的意图
允许应用程序同样由用户,程序,自动化测试或批处理脚本驱动,并与最终的运行时设备和数据库隔离开发和测试。
当事件从外部世界到达端口时,特定于技术的适配器会将其转换为可用的过程调用或消息,并将其传递给应用程序。该应用程序对输入设备的性质一无所知。当应用程序发送内容时,它会通过端口将其发送到适配器,从而创建接收技术(人工或自动)所需的适当信号。该应用程序与其所有侧面的适配器进行语义上的声音交互,而实际上并不知道适配器另一侧的物体的性质。
此处文章的备份版本: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>"));
}