CMake 是一个开源的跨平台自动化建构系统,是目前最主流的 C/C++语言构建工具。CMake3.0 之后引入很多新的特性,有效提升了编写构建脚本的效率,称为 Modern...
上世纪60年代后,由于“软件危机”的推动,人们开始借助工程化的方式解决软件开发中质量、成本和工期不可控的问题,形成了软件工程学。 软件工程学从其他人类工程学(如建筑学和硬件开...
互联网产品业务的不断发展,对数据库提出了各式各样新式的需求,于是涌现出了众多的数据库产品去迎合这些需求,导致软件开发者面对这么多选择时无从下手。 有些开发者在开发初期喜欢选择...
正交设计,是普遍的设计原则,与粒度无关,与编程范式无关,更与具体的实现语言无关。(虽然确实在不同的编程范式下,或使用不同的编程语言时,具体的解决方法或难易程度不同,这也正是为...
写的真好,今天突然想再理一些DCi,竟然在百度上搜到你的文章
DCI in C++DCI[https://en.wikipedia.org/wiki/Data,_context_and_interaction]是一种面向对象软件架构模式,它可以让面向对象更...
领域驱动设计(DDD)旨在软件设计过程中提炼领域模型,以领域模型为核心改善业务专家和软件开发者的沟通方式,对企业级软件开发起到了巨大的推动作用。遗憾的是市面上关于领域驱动设计...
前言 模板的基础知识模板的类型参数模板的默认参数模板的模板参数模板的特化模板的非类型参数模板的编译期计算数值计算类型计算模板递归 C++模板元编程元函数高阶函数柯理函数(cu...
说文解字选择抽象分享领悟成长之路消除重复提炼知识成为习惯更新知识重构自我专攻术业 说文解字 读书有三到,谓心到,眼到,口到。- 朱熹《训学斋规》 我出生时,父亲为我取名「刘光...
Design is there to enable you to keep changing the software easily in the long term. -...
混入机制还是很好用的呀
混入日志本文通过应用中天天都见得到的日志打印谈起,聊聊封装隐藏,性能优化,惰性求值,消除重复的技术实践。 延迟评估 Eliminate Effects Between Unrelat...
如果我要用Scala,我觉得就没有必要使用operator这个参数了。当然,也可能是这个案例不太适合,命名就是一个函数抽象的事情(Int, Int) => Int,却被搞得复杂了。(当然,考虑类型的扩展,而不只是支持Int,还需要用到泛型)。换言之,这个Calculator,就是接收一个函数,这完全是OCP的。如果想要简化客户端调用,可以将add、minus等函数以val的形式定义在一个Object里面,让用户去选择使用即可。API类似这样:
Calculator.apply(x, y)(Opertion.add)
定义如下:
object Calculator {
def apply(x: Int, y: Int)(f: (Int, Int) => Int) { f(x, y) }
}
object Operator {
val add = (x, y) => x + y
val minus = (x,y) => x - y
}
迭代1:快速实现 需求1:实现一个计算器,完成加减乘除运算 这是一个很糟糕的设计,存在很多的坏味道。 类型不安全 一般地,用户按照规则传递正确的op常量。 但不排除用户传递错...