博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

水龙卷

我是一个对自己进行debug的程序,所以行动迟缓些,不要见怪
  waterspout.cublog.cn

关于作者
姓名:何云龙
职业:Linux移动终端平台开发
介绍:走的更远些
|| << >> ||
我的分类


真的不会有银弹么?
    软件开发是一件很伤脑筋的事情,因为现在的软件越来越复杂,不仅是要处理的逻辑变得更复杂了,软件开发的工具,运行环境也更多样化,虽然大家都是在尽量减轻程序员的负担,可结果却是程序员不得不掌握更多的知识来应付多变的开发工作。
 
    最近几年和过去几年的发展还是有些差别的,过去的软件主要还是关注于如何实现特定的功能,如何保证程序中少犯错误;而现在虽然也注重这些,但更为重要的是通过定义良好的架构,采用更为有效的表达方式,如使用动态语言,来减少程序中的冗余,进而减少错误的可能。软件的发展一直都是在朝着更加自然的表示的方向发展,或许,最终软件能够发展到理解人类的知识,能够和人类进行自然语言上的交互,那时软件应该具有自我学习,自我进化的功能了。
 
    不过那是比较遥远的事情了,虽然我这个人喜欢好高骛远,喜欢神游天际,毕竟还知道那是不现实的梦,至少在我有生之年估计看不到那个景象了,还是老老实实的面对现实吧。
 
    谈到银弹,很自然的会想到自动编程,就是让程序自动的生成,比如我需要一个地址簿程序,通过这个地址簿可以浏览我和某个人的通话记录,并可以进行发消息或者打电话的操作,界面不复杂,但是怎么提供给我们的程序生成器让它自动产生代码呢?
 
    首先是界面,现在界面描述是很成熟的技术,在PC上我们知道RIA类似的功能已经是很好的描述手段了,尤其是JavaFX,或者XMLUI,原理都是用简明的文本来描述预定义好的组件在目标窗口中的布局和属性。但是描述界面容易,真正重要的是界面上对事件的响应,比如一个弹出菜单中某一项的选择会引起相应的处理,要能够描述这种事件处理,一方面在界面描述中定义能够处理的事件,另一方面是定义如何处理这个事件。如果是系统预定义的事件,比如键盘事件,一般在组件的实现中就有了接口;另一种是组件向外派发的事件,比如MenuItem的Select事件,我们也可以认为这是组件固有的事件,在界面描述脚本中我们也可以定义针对这些事件的处理。当然在某些平台上也允许组件动态创建未知事件,不在这里讨论了。
 
    对事件的处理是很棘手的事情,有人说不是阿,要处理事件,就把事件处理的代码在界面描述部分嵌入就行了阿。真的是这样么?比如我们的例子,在选中某个人之后,菜单项中可能会有“查看通话记录”一项,点击后进入通话记录界面。假如我们有另外一个Screen是通话记录界面,那么我们在Select事件处理函数中直接去显示通话记录界面就行了。如果是浏览器程序,我们就让浏览器导航过去,如果是Android程序,我们就把Intent和注册的Receiver联系起来就行了。
 
    如果对事件的处理比较复杂呢?比如“通过红外发送联系人”,不考虑实现方式,我们得先将这个联系人序列化为一个文件,比如vcard文件,然后检查红外连接,如果连接准备好了就把这个文件传过去。由此可见,底层功能如果模块化很好,或者已经标准化,我们在实现这个功能的时候基本只要顺序的去做就行了。
 
    难点就在于底层的模块化很差。借鉴现在SOA里web服务等起到的作用,我们就知道即使在手机平台里,提供各种服务的share library其实也就是一个服务组件,如果接口定义恰当,我们也完全可以使用接口描述符和服务描述语言来表达,从而实现代码装配甚至是动态发现装配的功能。
 
 

发表于: 2008-01-18,修改于: 2008-01-18 23:00,已浏览248次,有评论0条 推荐 投诉


网友评论
 发表评论