[翻译]在 Go 应用中使用简明架构(5)

原文在此,续……

——–翻译分隔线——–

在 Go 应用中使用简明架构(5)

基础层

就像上面提到的,我们的存储认为“数据库”是一个可以用 SQL 请求发送或接收数据行的抽象。它们不关心基础构建的问题,例如链接到数据库,或使用哪个数据库。这是在 src/infrastructure/sqlitehandler.go 中完成的,高层次的 DbHandler 接口是通过调用低层次的功能来实现的:
Continue reading “[翻译]在 Go 应用中使用简明架构(5)”

[翻译]我其实没办法学 Erlang,因为它不存在,所以我发明了它

这是 Joe Armstrong,Erlang 之父在昨天(2013-01-24)发表在 Erlang 邮件列表里的内容。详细解说了他自己从开始学习编码到发明 Erlang 的整个历史。并且,对如何学习编程;如何成为大牛等一系列热门问题提出了自己的看法。当然,文中槽点无数(包括坚定不移的黑我大PHP)。这也是我觉得有必要翻译出来的原因之一。

由于是发在邮件列表的,所以原文是没有正式的标题的。我从 HN 上抄了这个标题回来。

整体上,虽然是和 Erlang 相关的话题。但是读过之后,会突然领会到 Golang Team 一直以来坚持的一些东西的更深层次的含义。

————翻译分隔线————

回到过去……

当我开始学习编程的时候(1967),我可以在 FORTRAN 和(传说中的)Algol 之间选择,不过没有任何人了解 Algol,所以我选择了 FORTRAN。

编程的一个周期是三个星期

      第一周 在纸上的表格里编写代码,然后送到计算机中心将其转换为打孔卡
      第二周 复查打孔卡,如果没问题就放到设备上执行
      第三周 得到结果

编译器遇到第一个语法错误的时候会终止运行,这会将你带回第一周——因此,如果在你的程序中有十个错误,它会需要花费 30 周的时间让它运行起来。

这种氛围是非常好的——教会大家不要犯错,并且首先思考。

Continue reading “[翻译]我其实没办法学 Erlang,因为它不存在,所以我发明了它”

The wall 这副图,我已经发过很多次了。在德国的一个儿童游乐场的摩天轮下,它静静的矗立在那里。我不知道有多少人倒在它的脚下。我也不知道有多少人,因为守卫士兵“抬高一厘米”的枪口而幸存。在我拍这张照片的时候,仅仅是觉得好玩。并无多想。但是若干次的回想,当时的场景。回想那堵看得见的墙时。我总会有一阵阵心悸。

当这些士兵面对靠近墙体的人群扫射的时候,他们在想什么呢?他们的家人、朋友是否也在那人群之中惶恐不安的奔跑呢?

我不知道,我也不敢知道。

有人说,这些被墙阻隔、射杀的人群是“自作孽,不可活”,“一小撮……總是干這種幼稚愚蠢的無用的事情,遲早殃及其他……”。我不知道他们又是怀着怎么样的心情说这样的话。纳粹想要的自我审查在这些丑陋的,但却可怜的嘴脸上表现得淋漓尽致。

有形的墙迟早都会倒的……

或许最难逾越的是人们心中那堵看不见、摸不着的墙吧?

“Across the Great Wall we can reach every corner in the world。”

[翻译]在 Go 应用中使用简明架构(4)

原文在此,续……

——–翻译分隔线——–

在 Go 应用中使用简明架构(4)

接口层

关于这点,必须说,所有东西都得有编码智慧,不论是真实的商业还是我们的应用用例。让我们看看对于接口层的代码这意味着什么。不像在各个内部层次中,所有代码都属于一个逻辑,接口层是由若干独立的部分构建而成。因此,我们将这个层次的代码拆分为若干个文件。

由于我们的商店要通过 Web 访问,就从 Web 服务开始吧:

Continue reading “[翻译]在 Go 应用中使用简明架构(4)”

[翻译]在 Go 应用中使用简明架构(2)

原文在此,续……

——–翻译分隔线——–

在 Go 应用中使用简明架构(2)

架构实现

首先来实现领域层。之前已经说过,应用和其用例将完全可用,但是这不是一个完整的商城。因此,定义领域的代码应当足够短小,这样正好可以放在一个文件中:

Continue reading “[翻译]在 Go 应用中使用简明架构(2)”

[翻译]在 Go 应用中使用简明架构(1)

原文在此,很长,好文,不解释。不快点翻译,就翻译不完了。

—————-翻译分隔线—————-

在 Go 应用中使用简明架构(1)

关于这篇文章

我想通过展示如何将 Bob 大叔的简明架构使用到 Go 应用,来向这个概念做一些贡献。这里并未对 Bob 大叔的博文进行过多的修改,因此阅读他的文章是理解我的内容的先决条件。

其中,他主要描述了依赖原则,也就是软件的不同部分组织成环的形式一个套一个的应用到架构中。“……也就是说代码的依赖应当是内敛的。内环对外环的一切都一无所知。尤其是那些定义在外环的名字,不应当在内环的代码中出现。包括函数、类、变量或任何命名的软件模型。”

我认为,依赖原则是构建可对框架、UI或数据库进行局部测试并解藕的软件系统的最为重要的条件。当遵循这个条件时,将得到一个有着明确关注分离的低耦合系统。
Continue reading “[翻译]在 Go 应用中使用简明架构(1)”

为什么 PHPer 应当学习 Golang

熟悉我的朋友应当知道,近些年的大部分时间我的工作都会多少和 PHP 相关。随着 PHP 有着越来越深入的了解,以及遇到越来越多的不同业务时,使用 PHP 总会让我有一种莫名的无力感。当然,并不是我一个人在使用 PHP 的时候遇到了问题。事实上,每个略微有一些经验,接触过一些需求的人都会有同样的困惑。各种配合 LAMP(或者LNMP?)架构的后端技术也因此被发明或被发现,进而整合到 PHP 的开发的技术体系中。从简单的 Memcached作为数据中转,cron 后端定时处理;到 GearmanRabbitMQ 这些队列神器;最近 Laruence 甚至封装了利用 libcurl 的异步特性实现并发 RPC 调用的 yar 扩展。几乎整个社区都在寻找 PHP 的摩西之路。

好吧,说了一大堆,回归主题。之前我写了一篇英文练笔《Why you PHP guys should learn Golang》,获得不少国际友人的关注。排除拼写和语法被他们诟病外,主要是有许多朋友觉得我没把事情说清楚。所以这里我用母语重新聊聊这个事情,只是这些国际友人什么时候能学会阅读中文呢?;)

Go 或者 Golang,是由 Google 支持的快速、一致、稳定的,有活跃的社区支持的开源编程语言。越来越多的应用选择使用 Golang 进行构建。虽然 Rob Pike 说“… 我们希望 C++ 程序员来了解 Go 并作为一个可选的语言 …”,不过我真得认为:PHPer 应当学习 Golang! 接下来我们就来谈谈原因。

Continue reading “为什么 PHPer 应当学习 Golang”

Why you PHP guys should learn Golang

Go or Golang, is a open source, community supported, fast, consistent, scalable, productive language, and conceived by Google. More and more applications were build with it. Although Rob Pike has said that “… we expected C++ programmers to see Go as an alternative …”, but I really think of that: You PHP guys should learn Golang! Let’s talk about WHY.

Continue reading “Why you PHP guys should learn Golang”