4.3 自顶向下设计 采用传统过程式语言进行模块化编程时,主要通过自顶向下方法来进行系统设计。 自顶向下设计也称为逐步求精(stepwise refinement),是将一个系统逐层分解为子系统的设计过程。首先,对整个系统进行概要设计,指明构成系统的顶层子系统有哪些,注意在 此并不给出各个子系统的细节。其次,对每个子系统重复这个设计过程,即再将每个子系统 分解为下一层的子系统。就这样不断细化每个子
本章要向大家介绍重要但却并不是那么传统的“范式”(Pattern)程序设计方法。 在向面向对象程序设计的演化过程中,或许最重要的一步就是“设计范式”(Design Pattern)的问世。它在由Gamma,Helm和Johnson编著的《Design Patterns》一书中被定义成一个“里程碑”(该书由Addison-Wesley于1995年出版,注释①)。那本书列出了解决这个问题的23种不同的
日志和配置的重要性 前面已经介绍过日志在我们程序开发中起着很重要的作用,通过日志我们可以记录调试我们的信息,当初介绍过一个日志系统seelog,根据不同的level输出不同的日志,这个对于程序开发和程序部署来说至关重要。我们可以在程序开发中设置level低一点,部署的时候把level设置高,这样我们开发中的调试信息可以屏蔽掉。 配置模块对于应用部署牵涉到服务器不同的一些配置信息非常有用,例如一些数
这份文档描述了模板引擎中的语法和语义结构,对于创建 Jinja 模板是一份相当有用 的参考。因为模板引擎非常灵活,应用中的配置会在分隔符和未定义值的行为方面与 这里的配置有细微差异。 概要 模板仅仅是文本文件。它可以生成任何基于文本的格式(HTML、XML、CSV、LaTex 等等)。 它并没有特定的扩展名, .html 或 .xml 都是可以的。 模板包含 变量 或 表达式 ,这两者在模板求值的
设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。 其中一个原因是它可以让我们站在巨人的肩膀上,获得前人所有的经验,保证我们以优雅的方式组织我们的代码,满足我们解决问题所需要的条件。 设计模式同样也为我们描述问题提供了通用的词汇。这比我们通过代码来向别人传达语法和语义性的描述更为方便。 本文我们将阐述JavaScript编程语言中经典
这本书将教会你使用Rust 编程语言。Rust 是一个系统编程语言,它注重于三个方面:安全,速度和并发性。为了实现这些目标,它没有采用垃圾回收机制(GC)。这让它在其它语言并不擅长的场景中大展身手:嵌入到其它语言中、在特定的时间和空间要求下编程、编写例如设备驱动和操作系统这样的底层代码。
对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步。 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现。 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我。
本教程解释了各种类型的设计模式及其在 Python 脚本语言中的实现。本教程将使用 Python 概念通过不同的方法和示例引导您乘坐过山车。
微服务是一种分布式系统解决方案,推动细粒度服务的使用,这些服务协同工作,且每个服务都有自己的生命周期。因为微服务主要围绕业务领域建模,所以避免了由传统的分层架构引发的很多问题。 微服务也整合了过去十年来的新概念和技术,因此得以避开许多面向服务的架构中的陷阱。本书包含了业界使用微服务的很多案例,包括 Netflix、Amazon、Gilt 和 REA 等。这些组织都发现这种架构有一个很大的好处,就是
提前将 template 编译成 ANode,可以避免在浏览器端进行 template 解析,提高初始装载性能。ANode 是个 JSON Object,stringify 后体积较大,需要设计一种压缩,让其体积更小,网络传输成本更低。 ANode 压缩,简称 APack 总体设计 设计目标和约束有: 体积较小 解压缩过程快 基于以上,基本方案为: 使用一维 JS Array 作为压缩后的对象。符
在GoF(Gang of Four)的书中提出的设计模式为面向对象的软件设计中遇到的一些普遍问题提供了解决方案。它们已经诞生很久了,而且被证实在很多情况下是很有效的。这正是你需要熟悉它的原因,也是我们要讨论它的原因。 尽管这些设计模式跟语言和具体的实现方式无关,但它们多年来被关注到的方面仍然主要是在强类型静态语言比如C++和Java中的应用。 JavaScript作为一种基于原型的弱类型动态语言,
在javascript中,几乎一切都是物件,在物件导向设计的模式下,应该会常看到这样的状况: var dipsy = { name: "dipsy", color: "green", sayHello: function(){ console.log("Hello!");} }; var po = { name: "po", color: "red", sayHello: function(){
虽然Google没有对应用图标的设计做出强制规定,但给出了一份建议文档,完整文档可以参见https://developer.chrome.com/webstore/images,本节将根据原始文档内容,对图标设计规范相关的部分进行转述。 在应用展示页面(chrome://apps/),Chrome默认会以128像素的尺寸展示应用图标,但根据窗口实际尺寸会自动进行缩放,最小展示64像素的图标。 Ch
CodeIgniter 的目标是在最小化,最轻量级的开发包中得到最大的执行效率、功能和灵活性。 为了达到这个目标,我们在开发过程的每一步都致力于基准测试、重构和简化工作, 拒绝加入任何对实现目标没有帮助的东西。 从技术和架构角度看,CodeIgniter 按照下列目标创建: 动态实例化。 在 CodeIgniter 中,组件的导入和函数的执行都是在被请求的时候 才执行,而不是全局的。除核心资源外,
The v1 architecture delivers the following advantages: 此V1版本架构实现了以下改进: Chaincode trust flexibility.链码信任的灵活性 The architecture separates trust assumptions for chaincodes (blockchain applications) from t