1. 战略设计:充分理解业务领域、合理划分 BoundedContext,并在 BoundedContext 间的耦合点做足抽象,保证耦合点变化少(例如,最开始只有手机号注册,后面来了微信微博用户。如果合理划分了 BC,那么只需要改身份与访问上下文,其他模块不需要改一行代码、一行测试代码)
2. 遵循 DDD 的战术设计( less important than (1) )
3. 代码需要有测试。易于测试的代码大概率是好的代码(例外:test induced design damage )
4. 少魔法、少炫技的代码,尽量减少他人的障碍
说开闭原则的,还只是停留在理论阶段的菜鸟。web 框架可以开闭,例如
asp.net 、spring,但是你的业务代码中的 application layer 你使用继承的方式扩展一个试试?根本原因在于 application layer 的职责是协调,是非常贴近核心需求的。新到来的需求用继承来扩展,如果你实践过,会发现非常痛苦。
开闭原则描述的是通过继承、重写方法来进行扩展。打个比方,你写一个字可以越描越好看,越描越有楷体的感觉;但是你写作文如果这里插入一句,那里插入一句,就会乱七八糟。