关于软件设计,还是想多说几句,下面是本人的个人见解,可能部分观点纯属虚构。
首先设计思想上,架构上来说,逻辑架构+运行架构,至于物理架构本人体会不深,数据架构在中间件设计上用得少;面向对象来说,对象+协作构成组件,然后组件+协作构成系统(更大组件);其实再说简单实际点,就是领域模型+线程模型。
来张图:
举个具体例子吧,ThreadPoolExecutor,初步领域模型就是线程池、任务、工作者,初步线程模型就是多个并行的worker线程;算法逻辑上再细化,多余的任务存起来,然后由工作者取出处理,推导出还需要一个队列,线程模型不变;根据你的逻辑继续这个过程。
来张图(老图了):
再深挖点对象协作,来串一串设计原则,外部编程用到某个组件(对象),是调用接口(依赖倒转),接口提供内聚的服务(单一职责、接口隔离);
组件内部在继承Abstract时,不是覆写父类方法(里氏代换),否则考虑组合方式(组合优于继承),实现接口来扩展功能(开闭原则),最后减少不必要的协作,即低耦合(迪米特法则)。
设计模式的图就不来了,模式有很多,对象模式、架构模式、线程模式,又罗嗦了好几句。
当然上面的东西,在你研究中间件时比较有用,当然做个小系统也能用上,当然现在已经是大规模分布式的时代,面向服务的设计更多见,服务的独立开发、构建、部署、测试(编不下去了);
多线程跟分布式有不少相通的,线程协作类似节点协作;再细说点,协作比如map-reduce(生产-消费),负载比如加权随机,路由比如注册中心,高可用比如raft复制集。
最后再说几句,应用系统跟中间件关注点还是差别很大的,从架构视图上就能看出来 没了。
转载于:https://my.oschina.net/lobo/blog/855288