和Google互补的搜索引擎Wolfram|Alpha
Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。
作者 Sadek Drobi 译者 郭晓刚 发布于 2007年11月17日 上午11时41分
“吩咐,不要询问”:按照Pragmatic Programmers的说法,在面向对象编程中最好“吩咐一个对象让它去做些什么,而不是向它索要数据”。Michael Feathers认为“这是一个极佳的建议”,特别是对于比较大的系统:
返回值把工作又推回给调用者。单单做完一件事然后向协作者发送一条消息还不算完;你必须等着看有没有什么被送回来,然后可能还要做更多的事情。如果不返回值会让我们更轻松一点。
Feathers认为在测试驱动开发中使用Mocks会导致这种类型的架构:
与其吩咐一个对象去做事,然后询问它是否已经完成,你不如吩咐它去做事,然后看看它的协作者有什么变化。[……]这有点像工作流。[……]遇到新需求的时候比较不会影响到设计。而且,这样很合理。每个对象负责一件事情,并且通知下一个接班的对象。
我们还可以更进一步。Feathers主张如果没有返回值需要等候,那么发送“异步消息比同步消息更好“。实际上H.S. Lahman早就主张过在面向对象架构中的“行为是被假定为异步的”。如今的OOP模型是同步的,这是因为在面向对象编程语言中“没有区分开消息和方法”。因此“更加难以构造出正确的OOA/D模型”,正确的模型不仅可以显著提高可维护性,还包括健壮性。
Michael Feathers描述说这种做法也与Erlang的模型相吻合:
Erlang隐含的思想是,如果你能创建大量的进程,并保证它们绝不共享状态,你就可以开发出更加健壮的系统。每个进程接收消息,做自己的工作,然后向其他进程发送消息。消息的发送主要是异步的。
Feathers认为,“吩咐,不要询问”的编程模型“几乎是函数式编程的反面”,虽然“两者都有一个相对无状态的河床让数据从上流过”:
在最纯粹的函数式编程中,你从不吩咐,总是询问。而且如果有缓求值(lazy evaluation)帮忙,系统只需完成最必不可少的操作来回答你的问题。
不过可争议的是Erlang不能被认为是纯粹的函数式语言。Feathers也特别引用Ralph Johnson的观点,他指出Erlang的“核心里头是OO”。
就你的观点,哪种无状态模型最适合处理现今的适应性和健壮性问题呢?是Erlang的异步消息模型还是某种纯粹的函数式编程方法(如Haskell)?
查看英文原文:Designing for flexibility and robustness: Asynchronous message model, OOP and Functional ProgrammingWolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。
Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。
罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。
Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。
中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。
HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。
3 条回复
关注此讨论 回复