说实话,我对硬件平台没有什么经验,因此,也提不出太多的看法。不过,对Web平台和软件架构还是有一点体会,希望能够和您分享。
刚开始,我在努力猜测您的意图,不过我也同时发现这很难,而且风险很大。我不太清楚您到底需要什么,只好以不变应万变,我会结合自己所经历过的项目,去谈谈对Web平台和软件架构的一些看法,这也是我现在能够为您做的了。
关于Web平台
说到Web平台,我想谈谈瘦客户端(Thin Clients)和胖客户端(Fat Clients)。因为这对于Web平台,无论是使用,还是开发,都是具有革命性意义的。
让我们先看看瘦客户端吧。我们在享受着它的易于部署、易于维护,客户端成本为零的好处的同时,也为它糟糕的用户体验和复杂的开发所头痛。我是个软件工程师,因此,对于Web开发中很多恼人的问题也感触颇深。例如,没有很好的IDE环境,没有丰富的控件支持,总得刷新页面等。
有时,看着C/S结构的开发人员们,满是羡慕,如果我们也有类似于Visual Studio那样的IDE环境,如果我们也有那么多能够托托拽拽,设置几个属性就OK的控件,如果不用老是刷新页面,那该多好呀。每到这时,就安慰自己,你看他们升级客户端程序多费劲呀,哪像咱们,一处发布,任何地方都能用。
瘦、胖客户端各有各的优势和缺点,如果能结合他们的优点就好了。于是,胖客户端的Web程序出现了,这在当时,着实让我兴奋了很久。当我看到Macromedia的Flex平台时,我真是激动万分,原来Web程序还能这样:不仅结合了C/S结构丰富的用户体验,很好的控件支持,同时还保留了Web方式的易于发布的优质。
在迷了一段时间的胖客户端后,发现它也不是万能的,也有其适用的范围。抛开开发,对于用户,胖客户端所带来的最大的好处在于丰富的用户体验,用户看到的不再只是简单的表格,不必总是刷新页面。因此,胖客户端比较适用于对用户交互要求较高的情况。例如,企业内部的信息管理系统、网络相册等。而对于没有太多用户交互,用户的大部分操作只是View的情况,胖客户端就显示不出它的优势了。例如,新闻网站还是用瘦客户端比较好。
OK,对于胖客户端和瘦客户端我就谈到这里。下面我还想就Web平台的两大主流技术:JSP和ASP.Net说两句,也是最近才有的感想,因为自己这段时间从Java平台转到.Net平台,对两个技术有个简单的对比。
从JSP到ASP.Net最大的感触是,JSP在易用性、控件支持和用户体验上远不如ASP.Net,但是它却有着ASP.Net所没有的、优异的框架组织。ASP.Net缺乏的是如何将这些优异的控件、组件有机的组织起来的框架,而JSP却恰恰相反。ASP.Net就像是一个明星球队,每个球员都很棒,但却缺乏一个很好的组织和协调;而JSP像是一个没有明星的球队,每个队员都不是很强,但是却有惊人的组织和协调。
好了,Web平台就谈到这吧。
关于软件架构
刚入行的时候,关心的是语言语法,后来研究控件、组件,再后来才发现,对于大型企业应用,真正的问题,不是某个算法如何优异,某个控件怎样使用,而是如何将这些单元有机的组织起来,实现良好的可维护性、可扩展性等,这也是我理解的软件架构。
谈到软件架构,我觉得应该说说应用程序的分层,我觉得分层是软件架构的表现,也是实现良好的可维护性和扩展性的方式。
还是老规矩,以我经历的项目来谈谈软件分层的好处和坏处。
我经历的第一个Web项目,界面层和数据层是绑定在一起的,其实也是当时最传统的做法,在界面页上嵌JSP数据库查询代码,html和JSP混合在一起。例如,要显示一个列表,就用JSP查出结果集,然后用<tr><td>作循环。
很显然,这样够直接,开发人员不用什么特别的设计就能够快速开发出东西。可是,问题呢?好多呀。例如:
l 代码的可读性很差,html中掺杂这数据代码,还有逻辑代码,你读代码就一个感觉――乱,想找个地方都找不到。
l 界面和数据代码、业务逻辑之间耦合,复用几乎为零。当我们想更改页面风格时,我们不敢改,为什么,因为我们不光要修改界面层,还有修改数据、逻辑代码,真是“牵一发而动全身”。当我们在另一个地方用到相同的界面,只是数据不同时,我们只能重新做一个界面再加数据代码,因为我们根本无法将界面从高耦合的代码中玻璃出来。
很庆幸,我们通过JDBC将数据库和应用程序的耦合关系断开了。它的好处在我们将数据库从Oracle 8i升级到Oracle 10g时体现出来。当我将后台数据库更换后,居然不用修改任何代码就能够Run起来。我觉得这也是分层能够带来的好处之一,将修改限制在某一层中,而不会影响其他层的东西。
总结了一下,觉得分层会在可维护性、可扩展性、可复用性上得到很好的效果。但是,想要得到它的好处,就要为它付出代价。分层对开发和设计人员都提出了更高的要求,而且调试时也会遇到困难。不过,我觉得这是值得的。
后来,研究了一些设计模式,读了一些关于Spring、Hibernate的书,为Java平台下有这样优异的框架而惊叹。
随着自己理解的加深,感觉无论是设计模式还是中间件、框架都是在不同程度上构建中间层,进行解藕。
好了,我谈完了,一些思想还不成熟,也不一定正确。不过,我仍然希望您能够满意,期望和您交流。谢谢。