`
canonical
  • 浏览: 367203 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
    软件开发是从设计开始的, 而设计的产物是一堆描述性的文档. 我们总是希望这些描述能够尽量完备, 例如在一个用例描述中我们总是希望加入尽量多的异常流描述, 尽量把所有的相关情况都同时呈现出来. 当我们对系统进行了大量的分解和分析工作之后, 往往会遇到一种理解上和验证上的困难, 即我们如何才能确保某个use case的运行结果恰好能够满足另外一个use case的输入需求, 整个系统能否精密的配合在一起. 此时我们可以依赖一些整体架构设计的文档描述, 或者补充更多的系统连接上的说明, 但是无论如何, 要在思维中同时把握那么多条执行路径是一件艰难的事情.     设计文档可以说是对系统行为的 ...
    http://ajaxanywhere.sourceforge.net/index.html     AjaxAnywhere利用JSP标签把Web页面标注出可以动态装载的区域, 可以直接把任何JSP页面转化为AJAX感知组件而不需要进行复杂的Javascript编码.     <script> ajaxAnywhere.getZonesToLoad = function(ur ...
    witrix平台中的tpl模板技术的重点在于标签定义的设计, 在于如何最大限度的发挥xml格式的表达能力。     tpl自定义标签的基本结构如下:     <Namespace:TagName tpl:tag="realTagName"         tpl:noborder="${booleanExprInCo ...
    经济学的核心概念是合同(contract),多个利益主体(具有不同的价值目标)在交互中达成一致协议。这本质上是个多目标优化的问题。这与物理学的精 神是有着本质区别的。物理学传统上认为世界是完美的,存在着唯一的真理。根据Lagrange原理,最低能量原理等,物理世界总是在众多可比的备选结构中 选择那唯一最优的结果。在经济学中不存在唯一的价值取向,并不是所有的事物之间都是能够进行比较并排出座次的。比如,我们大多数人会认为10个老婆饼比一 个老婆饼好,10个葱油饼比一个葱油饼好,10个老婆饼加10个葱油饼比一个老婆饼加一个葱油饼好,但是10个老婆饼和10个葱油饼之间如何比较,却是没 有确定的结 ...
    过程控制的要点是哪些?我从以下几点来考虑这个问题。  第一点是测量,衍生出定义,标识,记录,评判等。测量需要在具有分歧的变化之处进行(与其它过程的交连之处)。   第二点是预测,预测不准的原因一般是信息不足或者是非线性。确定性系统中可以产生貌似随机的混沌现象。物理学中混沌控制的基本要点是缩短控制间隔,尽量利 用确定性的信息,而且间隔减小之后,多半可以部分恢复线性。此外,控制所需的信息也并不需要是整个动力学过程的全部信息,只需要是某个动力学切面上的信息 即可。  第三点是控制点的选择,控制点分为时点(时机)和位点(对象)。有时需要在系统中制造出某个瓶颈来便于施加控制。  第四点是执行,控制 ...
quartz是一个高质量的任务调度软件包。其主要组成部分为: Scheduler接口: quartz的执行线程,它根据Trigger决定调度时刻,根据JobDetail的说明实例化并运行Job JobDetail类: 可持久化的任务描述信息。任务虽然分组,但是仅用作管理标示 ...
  hibernate等O/R Mapping软件包中使用javabean来作为数据的载体, 但这些bean一般除了get/set等数据访问方法之外没有什么其它的业务方法。 前一段时间有人认为这是所谓贫血的领域模型(Anemia Domain Model),引发了一场讨论。 其实这些bean的作用仅是表达了领域内的数据关系, 本身并不可能作为完整的领域模型层存在。 在数据层,我们所需要的是数据对外暴露,因为我们无法预知这些数据的使用方式, 就象是实验数据发表出来以后你无法预知别人如何分析一样,这时信息流是开放的,向外的:信息在这里,放马过来吧。 而在业务逻辑层,复杂的逻辑控制交织在一起,我们需要 ...
    在程序中需要返回一个数据集合的时候, 应该尽量选用标准的Java集合类接口,例如List, Map等. 有时也见到有人选择返回Iterator对象, 一般情况下这不是很好的选择. Iterator对象的功能有限, 而且存在一种即时消费的特点, 我们一般不能把一个Iterator保存起来留待以后使用. 而且JDK提供的集合类也不能从Iterator直接构造出来,例如没有 new ArrayList(myIterator), 这样为数据复制造成一定的困难.     Iterator在理论上的好处之一是可以支持延迟加载数据, 但是实现起来比较繁琐而且单条加载也是比较低效的. 在witrix平 ...
 Ivar Jacobson 在其著作"Aspect-Oriented Software Development with Use Cases"中将AOP(Aspect-Oriented Programming)上升为一种贯穿软件开发全生命周期的设计技术,由建筑学的隐喻引出了decoration overlay(existion + extensions)的策略。在建筑学中,首先基础设计图规划了房间的空间划分,电气工程师基于这张基础图决定电气设施排布图,而装修设计师可能依据基 础设计图决定装修方案。所有这些扩展(extension)设计图叠加到基础设计图之上构成的最终设计方案 ...
交叉表(Cross Table)的基本特点是具有横纵两个自由延展的维度,而平面表结构只有一个可延展的维度,因为平面表的列名和列数是确定的。例如,地区的产品销售数量,在平面表中表达为 district_id product_id sell_num 如果表现为交叉表,则为            productA  productB districtA   sellNum   sellNum districtB   sellNum   sellNum 这种结构上的失配需要通过程序逻辑来进行调整。 注意到平面表结构只具有一个可延展的维度,而join可以看作是该维度上的连接操作。因此我们可以将交叉表看作是 ...
数据导出的功能大致可以分解为三个部分: 1. 从数据源读取一条记录 2. 将一条记录导出为指定格式 3. 循环调用1和2 首 先我们需要一种机制来对外暴露数据源(一种Container)中的数据,Iterator模式恰能满足要求。其次,我们需要一种机制来对一系列数据进行 处理,这对应于Visitor模式。第三,在组合Iterator模式和Visitor模式的处理过程中,我们需要表达出平面表数据集的基本特征。 在witrix平台中,平面表数据导出和转换通过TablePageProcessor对象来完成, class TablePageProcessor{  IPageViewer viewer; ...
分页的功能由两部分组成:取数据和计算分页。其中取数据的功能由IPageViewer接口实现 interface IPageViewer{  int getTotalCount();  List getAll();  int listPage(int startPos, int maxCount); } Pager是用户调用时的接口 class Pager{  public List getAll(){}  public List listPage(){}  public int getPageCount(){}  public int getPageSize(){}  public int ge ...
java中最常用的数据结构类型是Map和List, 它们也是Container的两种基本模式,一个是根据特征值定位,一个是根据地址定位。 它们共同的一个特征是表达了数据之间的直接的,短程的一种相关性。另一种常见的数据结构Tree则表达了数据之间的一种长程的关联:根节点与其所有层次上 的子节点之间都存在着关联。 文件系统,组织机构, XML文档等都可以对应为Tree数据结构。在描述树形结构的时候,我们经常使用XML文件, 但是XML文件在程序中操纵起来并不方便,这其中的一个重要原因是XML是面向文档的,即操纵XML的API返回的和使用的都只能是文本字符串,而不能直 接使用程序中常见的其他数据结构。 ...
   CRUD(Create, Read,Update, Delete)操作中最难处理的是查询。因为查询总是多样化的,如果每个特定查询调用都编制一个对象方法,则维护量太大且扩展性很差。如果编制一个通用的 查询接口,一般的做法是直接以SQL文本作为参数,但这样就几乎丧失了封装的意义。这里的核心问题是Query本身是复杂的,我们应该将它对象化为一个 类,在程序中控制Query的结构,而一个文本对象与一个复杂的Java结构对象的差异就在于对于文本对象我们很难有什么假定,因而在程序中也很难编制通 用的程序对其进行处理,一般只能对它进行传递。实际上,文本中描述的结构存在于java程序之外!当然,我们可以利 ...
    新手总是有很多不好的代码习惯. 最常见的一个是不使用临时变量.例如     for(int i=0;i<myList.size();i++){         otherList.get(i).getSomeVar().getName();         otherList.get(i).getSomeVar().getValue();     }     这种做法有如下后 ...
Global site tag (gtag.js) - Google Analytics