9.1 企业应用开发面临的挑战 9.1.1 可扩展性 可伸缩性

9.1 企业应用开发面临的挑战

企业应用的开发是相当复杂的,这种复杂除表现在技术方面外,还表现在行业本身所蕴含的专业知识上。企业级应用的开发往往需要面对更多的问题:大量的并发访问,复杂的环境,网络的不稳定,还有外部的Crack行为等。因此企业级应用必须提供更好的多线程支持,具备良好的适应性及良好的安全性等。
由于各行业的应用往往差别非常大,因此企业级应用往往具有很强的行业规则,尤其是优良的企业级应用往往更需要丰富的行业知识。企业应用的成功开发,也需要很多人的共同协作。
下面对企业应用开发面临的挑战作具体分析。

9.1.1 可扩展性、可伸缩性

市场是瞬息万变的,企业也是随之而变的。而信息化系统是为企业服务的,随着企业需求的变化企业应用的变化也是必然的
在多年开发过程中,经常听到软件开发者对于需求变更的抱怨。当开发进行到中间时,大量的工作需要重新开始,确实给人极大的挫败感,难免软件开发者会抱怨。不过,一个积极的软件开发者应该可以正确对待需求的变更。需求的变更,表明有市场前景,只有有变化的产品才是有市场的产品。
优秀的企业级应用必须具备良好的可扩展性和可伸缩性。因为良好的可扩展性可允许系统动态增加新功能,而不会影响原有的功能。
良好的可扩展性建立在高度的解耦之上。使用DelphiPower Builder等工具的软件开发人员对ini文件一定不会陌生。使用ini文件是一种基本的解耦方式,将运行所需资源、模块的耦合等从代码中分离出来,放入配置文件管理。这是一种优秀的设计思路,最理想的情况是允许使用可插拔式的模块(类似于Eclipse的插件方式)。
Java EE应用里,大多采用XML文件作为配置文件。使用XML配置文件可以避免修改代码,从而能极好地提高程序的解耦XML文件常用于配置数据库连接信息,通过使用XML文件的配置方式,可以让应用在不同的数据库平台上轻松切换;从而避免在程序中使用硬编码的方式来定义数据库的连接,也避免了在更改数据库时,需要更改程序代码,从而提供更好的适应性.
下面是使用SpringBean定义数据源的代码。

1
2
3
4
5
6
7
8
9
10
11
<!-- 定义数据源Bean,使用C3P0数据源实现,并注入数据源的必要信息 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://localhost/javaee?useSSL=true"
p:user="root"
p:password="root"
p:maxPoolSize="40"
p:minPoolSize="2"
p:initialPoolSize="2"
p:maxIdleTime="30"/>

上面的配置文件可用于建立数据库的连接,且等同于如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//创建数据源实例
ComboPooledDataSource ds= new ComboPooledDataSource();
//设置连接数据库的驱动
ds.setDriverClass("com.mysql.jdbc.Driver");
//设置数据库库服务的URL
ds.setJdbcUrl("jdbc:mysql://localhost:3306/javaee")
//设置数据库用户名
ds.setUser("root");
//设置数据库连接密码
ds.setPassword("root")
//指定连接数据库连接池的最大连接数
ds.setMaxPoolSize(200);
//指定连接数据库连接池的最小连接数
ds.setMinPoolSize(2);
//指定连接数据库连接池的初始化连接数
ds.setInitialPoolSize(2);
//指定连接数据库连接池的连接最大空闲时间
ds.setMaxIdleTime(true);

可以看出,第一种方式明显比第二种方式更优秀。因为当系统的数据库发生变化时(这是相当常见的情形),开发用的数据库与实际应用的数据库不可能是同一个数据库,当软件系统由客户使用时,其数据库系统也是需要改变的。采用第一种方式则无须修改系统源代码,仅通过修改配置文件就可以让系统适应数据库的改变。
使用XML配置文件提高解耦的方式,是目前企业级应用最常用的解耦方式,而依赖注入的方式则提供了更高层次的解耦。使用依赖注入可以将各模块之间的调用从代码中分离出来,并通过配置文件来装配组件。此处的依赖注入并非特指Spring,事实上,依赖注入容器很多,如HiveMind等。