架构师训练营 1 期 -- 第二周总结
架构师训练营第二周结束,感觉还是有一定难度,所以课程依然看了两遍,现总结如下:
使用高级语言做软件开发,要使用面向对象的思维,而不是使用面向对象的技术来编程。
要设计出良好的软件,需要遵循一些软件和一些设计模式,这些原则包括开闭原则,单一职责原则,接口隔离原理,里式替换原则,以及依赖倒置原则。
开闭原则是指,对功能的扩展开放,对功能的修改关闭,这通常可以通过面向抽象编程来实现。
单一职责原则是指,一个类应该只有一个引起它改变的原因,简单说就是类要尽量小,功能单一,只把高类聚的功能放在同一个类中。
接口隔离原则,就是不应该强行让客户端依赖它不需要的接口。当有一个接口有多种功能,部分客户端只使用其中一种功能接口时,需要考虑接口隔离。
里式替换原则是,子类应该可以完全替换父类,继承的判断标准不应该使用IS-A关系,而是在上下文中使用子类类替换父类,看是否会出现问题。可能违背里式替换原则的现象有:A) 子类函数退化。 B) 子类抛出了父类中不存在的异常。
当然除了这些,还有一些规范,如多用组合,少用继承,等等。
另外老师的Flower框架使用了Actor框架,这个框架我也使用了好多年,感觉很好用,老师关于Actor的架构图画得很清晰,这里也记录一下:
另外我也总结一些Actor的心得:
官方说,Actor中尽量不要做IO操作,容易引起阻塞,但其实Actor中不使用IO是不现实的。所以为了避免Actor卡死,我们需要为IO操作设置超时时间。如果你在Actor中调用restful API,如果不小心忘记设置HTTP请求超时时间,那么Actor可能会卡死。
Actor有两种使用场景,一种long-time actor,就是一直一直运行的那种。还有一种是instant actor,执行一个任务就销毁。推荐使用后者,这样可以提高并发性和相应速度,就算有actor卡死或长时间等待,也只是这个任务出问题,不会影响整个业务(频繁创建和销毁actor对性能影响不大)。如果需要周期性的执行任务,可以使用spring 的scheduler,尽量不使用UntypedActorWithTimer,增加的编程复杂度,需要做好异常处理,也不如spring scheduler灵活(可以使用Cron表达式)。(只是个人建议)
Actor可以作为一个状态机,在某些场景下有用。
评论