Skip to main content

chinese philosophy

背景介绍

tip

张建飞软件教练, 代码精进之路,程序员的底层思维,cola框架 作者 从码农到工匠 公众号

  • 灵感来源

A philosophy of software design

简单总结

哲学

黄金分割点vs中庸
0.618定义抽象本质两端未是不中(极端事情极端对待)
注重推理指导形而上学(博学之,有弗学,学之弗能,弗措也)

API设计中的抽象层次权衡

抽象 vs 具体

极端可扩展方案折中方案极端不可扩展方案
all Map itemsome map some itemall item value
网关不需要管,透传当前确定,但未来不确定通信协议

任何实体都会体现出抽象的层次性:

抽象层次越高,越灵活 抽象层次越低,越明确

eat red apple => eat apple => eat fruit => get su => eat thing

Reuse vs Repeat

reusevsrepeat
引入耦合问题解耦
平台化耦合例子抽象共性,组件,解决方案库

reuse的代价:耦合

Waterful vs Agile

WaterfulvsAgile
战略本质战术 干就完了
注重设计Good注重实践

end: 增量迭代

100% Coverage vs No test

写多少测试才算充分

I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence

50-60% -> no docrine

Kent Beck TDD创始人

TDD 芝加哥學派 vs TDD 伦敦学派

chicago school 至底向上

提倡推迟设计,等所有信息get,不得不决策; inside out, bottom up

London school 至顶向下

我们没有完美的架构可以快速直接完成,需要迭代,outside in, top bottom

真实情况

inside out + outside in, bottom up + top down

贫血 or 充血

事务脚本模式:补血

过犹不及: 抽血

关键是健康,共性的东西就可以沉淀到领域层 循序渐进沉淀领域能力:1.内聚,2.复用,3.可理解

以客户注册为例子: 先把App做厚,把整体业务覆盖 沉淀领域业务,领域是POJO的,可测试性非常好 对于外领域,通过gateway进行防腐

通常不建议将仓储层的操作放到领域服务中,因为这会违反职责分离的原则。 领域服务应该专注于业务逻辑,而数据持久化的操作应该由应用服务来处理。 不过,如果你确实有特殊需求,可以通过依赖注入的方式将仓储接口传递给领域服务, 但这应当谨慎使用,并且要确保领域服务的主要职责仍然是处理业务逻辑。

单体 vs 微服务

分布式单体陷阱

服务划分的考量维度:

功能维度:

业务内聚性 核心域,通用域

非功能维度:

可靠性 性能 易变性

组织维度:

组织结构 人员数 工期 业务发展

如果不能正确的构建大型单体应用,那么微服务也帮不了你

参考与致谢

评论区