参考比较好的博客:https://www.cnblogs.com/sirkevin/p/8283110.html
下面是我自己的总结
命令式编程
命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么
。对应英文即为How,如何实现(Imperative is How to do)
eg1. 命令式事务,使用者自行实现
@Component
public class Utils {
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;
// 开启事务
public TransactionStatus openTx() {
return dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
}
// 提交事务
public void commitTx(TransactionStatus ts) {
dataSourceTransactionManager.commit(ts);
}
// 回滚事务
public void rollbackTx(TransactionStatus ts) {
dataSourceTransactionManager.rollback(ts);
}
}
@Service
public class RegisterServiceImpl implements RegisterService {
@Autowired
private Utils utils;
@Override
public void programming(String name,String age,String studentId) {
TransactionStatus ts = null;
try {
// 开启事务
ts = utils.openTx();
registerMapper.programming( name, age, studentId);
int a=1/0;
registerMapper.programming( name, age, studentId);
if (ts != null) {
// 提交事务
utils.commitTx(ts);
}
} catch (Exception e) {
if (ts != null) {
// 回滚事务
utils.rollbackTx(ts);
}
}
}
}
eg2.The following example shows how to use Spring Retry in its imperative style ,此例子帮助理解(这里针对的实现重试功能)
RetryTemplate template = RetryTemplate.builder()
.maxAttempts(3)
.fixedBackoff(1000)
.retryOn(RemoteAccessException.class)
.build();
template.execute(ctx -> {
// ... do something
});
声明式编程
声明式编程是以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做
。对应英文即为What,要做什么东西(Declarative is What to do)
eg1. 在Spring框架中,声明式编程只能体现的即为注解式编程,如事务@Transactional
注解,即表示此方法具有什么功能,使用者不关心实现
@Transactional
public void executeSkill() {
...
}
eg2.The following example shows how to use Spring Retry in its declarative style,此例子帮助理解(这里针对的实现重试功能)
@Configuration
@EnableRetry
public class Application {
@Bean
public Service service() {
return new Service();
}
}
@Service
class Service {
@Retryable(RemoteAccessException.class)
public void service() {
// ... do something
}
@Recover
public void recover(RemoteAccessException e) {
// ... panic
}
}
区别比较,,,引出函数式编程
备注:
面向对象编程(object oriented programming)(OOP)
函数式编程(functional programming)(FP)
面向对象编程对象之间是如何关联起来的呢?共用数据状态,即State,数据状态相关依赖(面向过程编程POP是代码相互依赖)
而函数式编程是不会出现数据状态相互依赖,每个函数功能都是独立的,那么也就是说不存在数据共享的问题,既然不存在数据共享,那么就衍生出了函数式编程
函数式编程
一大特点是不修改状态,那么它就天然的支持多线程编程,且此种编程方式绝对的,即函数式编程为并发编程的一种安全处理手段。
讨论到此即可