现在讲软件工程的, 所谈论的多半是项目工程, 即如何在有限的时间内配置使用有限的资源在单个项目中达到既定的目标. 传统上, 在这一领域基于预测和计划的瀑布方法曾经占据主流, 但是随着项目的日益复杂化, 各种基于演化(evolution)思想的工程方法在实证中逐渐发展起来. 在时空跨度更大的软件工程领域, 例如延展到软件的不同版本以及多个相似项目的工程中, 演化更是逐渐取得了无可置疑的主导地位. 但是, 从另一个方面说, 目前所有这些软件工程方法所推崇的演化实际上都是非常有限的, 它们通过迭代(iteration)所能够描述的演化过程都只是片断性的, 例如一个项目中的演化, 一个软件产品的演化, ...
2007-07-29

关于JSF

   JSF(Java Server Faces)技术从发布时间上看已经是一种比较古旧的技术了,但是目前仍未能成为主流的开发实践。从我知道这种技术开始, 我对它的判断就与我最早对于EJB的判断一样, 它们都在某种程度上捕获了真正的需求,但是因为它们自身诡异的技术路线.我很怀疑是否这些标准制定者故布疑阵, 便如Microsoft的OLE技术一样, 故意抛出一个错误的方向, 将大批组件开发商带入死局.    JSF技术是一种双重的存在:它首先是一种标准,然后也提供了一种缺省的实现。但是从这两方面,我都无法看到JSF的未来。    从 ...
    我们开发程序的目的是为了完成业务功能, 理想的情况下程序中的每一条语句都应该是与业务直接相关的, 例如程序中不应该出现连接数据库, 读取某个字段等纯技术性的操作, 而应该是得到用户A的基本信息等具有业务含义的操作. dao(data access object)层存在的意义在于将与数据持久化相关的函数调用剥离出去, 提供一个具有业务含义的封装层. 原则上说, dao层与utils等帮助类的功能非常类似, 只是更加复杂一些, 需要依赖更多的对象(如DataSource, SessionFactory)等. 如果不需要在程序中屏蔽我们对于特定数据持久层技术的依 ...
    jsp模型为web程序提供了page/request/session/application这四个基础性的变量域. 这种变量域的划分很大程度上是纯技术性的, 与我们的业务应用中需要的scope支持相去甚远. 当我们把业务对象的生命周期映射到这些变量域的时候, 经常出现不适应的情况. 例如我们可能被迫选择把与某项业务相关的所有数据放置在session中并在各处硬编码一些资源清理代码. 为了实现与愈来愈复杂的应用开发的契合, 我们需要能够在程序中定义与应用相关的变量域并实现对这些变量域的管理, 即我们需要一种自定义scope的支持而不是使用几个固定的scope ...
    在无侵入性的前台页面控件设计方案中, 我们需要一种简便的方法迅速定位页面中的某一节点(dom node). 使用xpath是非常诱人的一个技术选择, 但是在实际使用中, 我们却发现xpath并不是那么方便. xpath的能力非常强大, 它支持绝对定位, 例如//input[@id='3'], 也支持相对定位, 例如 ./input[0], 甚至支持根据节点内容定位, 例如//a[contains(., 'partial text')].     问题是在一个复杂的界面控件中, html节点本身的结构与界面展现结构并不是一致的 ...
    现在很多设计中推崇接口和依赖注入(dependency injection),而不倾向于采用继承机制来构造程序结构。但很多时候作为一种简便而廉价的封装方法,继承仍然是不可或缺的. 例如与一些Engine打交道的时候,需要实现某些特定的接口. 在osworkflow中, 我们需要实现FunctionProvider接口,      interface FunctionProvider{         void execute(Map transi ...
    tag在国内java社区并不算流行,这在很大程度上是因为jsp tag的设计失误造成的。但在整个开发业界内,tag已经成为一种广泛应用的技术。微软的dotNet服务器端极端依赖tag技术,而在浏览器端IE的 behaviour, htc也独立的发展起来。Longhorn的XAML, Firefox的XUL无一例外的依赖于可自定义的tag。java社区的JSF, SiteMesh, Tiles 等等,不可尽数。有些人在前台通过给html原有元素增加自定义属性,然后通过javascript去解释的做法,也是一种element enhance概念的变种。至于Fr ...
    http://ajaxanywhere.sourceforge.net/index.html     AjaxAnywhere利用JSP标签把Web页面标注出可以动态装载的区域, 可以直接把任何JSP页面转化为AJAX感知组件而不需要进行复杂的Javascript编码.     <script> ajaxAnywhere.getZonesToLoad = function(url){ return "countriesList"; } </script>  &nb ...
quartz是一个高质量的任务调度软件包。其主要组成部分为: Scheduler接口: quartz的执行线程,它根据Trigger决定调度时刻,根据JobDetail的说明实例化并运行Job JobDetail类: 可持久化的任务描述信息。任务虽然分组,但是仅用作管理标示,任务之间并无实质性关联, 例如无法定义job chain。 Trigger类:任务的调度策略。这里的特点是调度策略与任务描述分开,调度策略和任务描述都可以分别在Scheduler注册,然后再关联起来。JobDetail与Trigger的关系是一对多。 JobDataMap: 将任务的运行时可持久化状态信息从JobD ...
    新手总是有很多不好的代码习惯. 最常见的一个是不使用临时变量.例如     for(int i=0;i<myList.size();i++){         otherList.get(i).getSomeVar().getName();         otherList.get(i).getSomeVar().getValue();     } ...
在时间轴上定位一般比较麻烦,我们可以编写大量的get函数来得到特殊时间点,如 getFirstDayOfMonth(int year,int month), getFirstDayOfNextMonth(int year, int month),这不如采用如下正交化的流式设计。EasyCalendar cal =     new EasyCalendar().toYear(2001).toMonth(1).toFirstDayOfMonth().toFirstDayOfWeek();
关系数据库的关键之处在于关系的分解,在数据库中只定义了数据之间的两两关系,与应用相 关的更复杂的数据关系需要在运行时通过动态join来构造出来,即这些关系储存在程序中而不是数据库中。实际上,关系数据库的一个隐含的假定是数据之间很 少关联,而在实际应用中单表和主从表也正是最常出现的情况。当一个应用频繁需要大量表的连接操作的时候,往往意味着关系数据模型的失效,此时我们将不得不 放弃数据的无冗余性,需要通过预连接来构造实例化视图(Material View),将数据之间的复杂关系固化并明确定义出来。 在数据仓库里,抽象的讨论star schema和snowflake schema哪个更优越是一个毫无 ...
   关系数据库的理论基础是集合论,而集合的基本定义就是不重复的一组元素。而xml数据库方面尚缺乏相应的理论来消除数据冗余性。    关系数据库能够成功的另外一个重要原因是它采用平面表形式,而应用中大量使用的正是平面表,所以数据库表在很多时候是数据的最适表现形式,使用xml表达 只会增加不必要的复杂性。平面表的基本假设是所有条目的结构都是一样的(具有一个header),而xml表示形式本身不存在这样的假定,因此很多时候无 法根据数据的shape来做有效的优化。当然xml schema等技术正在快速发展的过程中,当相应的元数据描述和使用技术逐渐成熟之后,x ...
一个技术的成功,在于最终占据了某个概念。当我们应用到此概念的时候,首先想到的就是这个技术实现,久而久之,形成一个自我证明的过程。而有些技术却是在 其位无能谋其政,实在是让人不得不为它扼腕叹息呀。jsp tag正是这样一种技术。有些人认为jsp tag只是jsp的一种扩展,只是一种syntax suger, 这正反映了此技术所面临的一种困境。这里指出一些jsp tag的设计缺陷,并无贬低这种技术的意图,只是希望抛砖引玉,引发大家对这种技术改进的探讨。 引用: jsp tag是服务器端的扩展标签机制,它是一系列java服务器端技术的基础。但其设计之初的几个重大缺陷已经使得这种技术不堪重负。 & ...
JMX在技术上的需求可以说是将管理功能从功能性接口中分离出来。 例如一个缓存接口 interface ICache{      Object get(Object key);      void put(Object key, Object value); } 但一个具体实现类可能有很多参数可以调整,如缓存的最大尺寸等。这些可配置参数一般与具体实现紧密相关,即与实例相关,而不直接涉及到所要实现的功能。例如实现类可以具有setMaxSize()和getMaxSize()方法。 如 果这些配置方法在功能接口中定义,就会 ...
canonical
搜索本博客
最近加入圈子
存档
最新评论