Martin Flower
1. Evolutionary DB design
Design with evolution
目标本身没有变化,但是随着深入了解产品与具体需求,需要更改系统的构建,让构建成为灵活的,就需要设计本身就是可扩展的,可变化的,乃至于重构,重新设计。 要求代码逻辑可以重用
设计本身就是可以进化演化的,而且演化过程是可控的,这样来应对需求变更的挑战
Agile processes approach change differently. They seek to embrace change, allowing changes to occur even late in a development project. Changes are controlled, but the attitude of the process is to enable change as much as possible. Partly this is in response to the inherent instability of requirements in many projects, partly it is to better support dynamic business environments by helping them change with the competitive pressures.
In order to make this work, you need a different attitude to design. Instead of thinking of design as a phase, which is mostly completed before you begin construction, you look at design as an on-going process that is interleaved with construction, testing, and even delivery. This is the contrast between planned and evolutionary design. One of the vital contributions of agile methods is that they have come up with practices that allow evolutionary design to work in a controlled manner. So instead of the common chaos that often happens when design isn't planned up-front, these methods provide techniques to control evolutionary design and make them practical.
2. Microservices
Separation by business Logic, not functional
每一个人都可以有一个独立可工作的程序,包含一定的业务功能,可以独立测试。与其他模块有干净的通信接口
。从build到部署运行,可以独立完成,无需和其他人进行沟通合作,除了接口的预定义
Decentrallize Governance。 Choose the appropriate tech you prefer to do the task, not constricting the tech platform
Organized around Business Capabilities
When looking to split a large application into parts, often management focuses on the technology layer, leading to UI teams, server-side logic teams, and database teams. When teams are separated along these lines, even simple changes can lead to a cross-team project taking time and budgetary approval. A smart team will optimise around this and plump for the lesser of two evils - just force the logic into whichever application they have access to. Logic everywhere in other words. This is an example of Conway's Law[5] in action.
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
-- Melvyn Conway, 1967
The microservice approach to division is different, splitting up into services organized around business capability. Such services take a broad-stack implementation of software for that business area, including user-interface, persistant storage, and any external collaborations. Consequently the teams are cross-functional, including the full range of skills required for the development: user-experience, database, and project management.