关于面向对象,面向组件和面象服务的简单讨论

时间:2022-10-11 11:05:20
java语言设计者觉得c,c++都是面向机器的,开发者必须了解机器,解决商业问题也必须让商业系统去适应机器,这对开发者来说,是很痛苦的

所以java开发者提倡面向对象,将万事万物都看作是对象,让程序员不再关注底层,而主要关注需要解决的问题。最初是从银行交易中的,客户,账户,交易等对象演化而来

但这十多年来,java面向对象的思想并没有最初说的那么美好,java类粒度太小,所以根本上没解决面向对象

后来开始面向组件,

面向对象就是一个个class,面向组件就是jar,面向服务就是一个个war

软件从诞生上线后,必然要维护和扩展,如果不按照组件这么做,扩展带来的依赖影响将是非常大的,以至于无法维护

但是面向组件也有问题,组件在一个进程内,想淘宝,京东,等这些大型网站,如果把jar全部放在一个应用下,一方面jar太多,内存都不够用,另一方面维护和测试巨复杂,最后的结果是无法维护和测试,所以现在大部分公司开始面向服务,将一个大系统拆成n个小系统,协作服务。

其实这种思想在我们现实生活中处处都是,举例来说,一个集团性公司,需要分成多个子公司,一个子公司分成多个部门,一个部门需要由多个岗位构成。集团公司就是系统,子公司就是子服务系统,部门就是组件,岗位就是class。

但如果给程序员讲讲大道理,比如:咱们国家也问题多多,咱们公司也问题多多,别公司也问题多多,部门不合理,岗位不合理的经常存在,但我们依然需要划分成多个部门多个岗位。所以咱们做软件系统开发也一样,我们划分了多个模块,不可能很完美,但依然要分模块。

软件程序本来就是现实问题的抽象,现实问题本身就是不完美的,所以不要对软件系统去求完美。

现实世界是会进化的,经过调整可以不断的完美,所以我们的软件系统也要能够适应调整,通过调整让系统更合理,反之,如果一个系统不能够调整,那就不符合设计原则。