naked的人现在已经无法在自然界中生存了,
我们需要依赖外在的衣服,房屋等才能维持基本的生存条件。曾几何时,那些曾经属于我们身体的一部分的功能已经逐渐被解离到外部对象中,只有思想似乎还要依
赖个人自身的能力。很多研究正努力把人的思维过程也外化了(思维导图MindMap就是一种很有趣的简易方式),也许有一天我们会走到离开工具就无法思
考,无法判断的境地。
tpl自定义标签的设计目标之一是尽量减少配置说明项. 在tpl标签库中, 标签定义格式如下
<标签库名称>
<自定义标签名 demandArgs="argA, argB"
importVars="varA, varB"
&n ...
- 20:32
- 浏览 (415)
- 评论 (0)
- 分类: Witrix开发平台
动态权限最简单的一个表现是时限性,subject只在某个时间段内具有某种权限。这只需要在user和role的映射中,或者role自身的属性中增加startTime和expireTime即可。
更复杂的动态性一般与流程控制相关,此时权限控制应该由工作流系统完成,而不是在数据上增加越来越多的权限标记。在witrix平台中,使用tpl模板技术来定制权限设置。
权限管理中进行数据访问控制,其基本模式如下
operation target = selector(resource)
selector = user selector + auth filter
这里需要对resource的结构,以及选择算子的显式建模。selector必须允许权限系统追加filter,例如
IDataSource包中所使用的Query对象。
...
- 10:48
- 浏览 (367)
- 评论 (0)
权限控制中,subject可能不会简单的对应于userId, 而是包含一系列的security token或certificate,
例如用户登陆地址,登陆时间等。一般情况下,这些信息在权限系统中的使用都是很直接的,不会造成什么问题。
subject域中最重要的结构是user和role的分离,可以在不存在user的情况下,为role指定权限。有人进一步定义了userGroup的
概念,可以为userGroup指定role,而user从其所属的group继承role的设置。一般情况下,我不提倡在权限系统中引入
userGr ...
- 10:46
- 浏览 (384)
- 评论 (0)
权限控制可以看作一个filter模式的应用, 这也符合AOP思想的应用条件。在一个简化的图象中,我们只需要将一个判别函数
isA ...
- 10:41
- 浏览 (444)
- 评论 (0)
在系统中发生的事情,抽象的说都是某个主体(subject)在某个资源(resource)上执行了某个操作(operation)。
subject --[operation]--> resource
所谓权限管理,就是在这条信息传递路径中加上一些限制性控制。
主体试图去做的 limited by 系统允许主体去做的 = 主体实际做的。
可以看到,权限控制基本对应于filter模式。subjec ...
- 10:39
- 浏览 (741)
- 评论 (0)
软件开发是从设计开始的,
而设计的产物是一堆描述性的文档. 我们总是希望这些描述能够尽量完备, 例如在一个用例描述中我们总是希望加入尽量多的异常流描述,
尽量把所有的相关情况都同时呈现出来. 当我们对系统进行了大量的分解和分析工作之后, 往往会遇到一种理解上和验证上的困难,
即我们如何才能确保某个use case的运行结果恰好能够满足另外一个use case的输入需求, 整个系统能否精密的配合在一起.
此时我们可以依赖一些整体架构设计的文档描述, 或者补充更多的系统连接上的说明, 但是无论如何,
要在思维中同时把握那么多条执行路径是一件艰难的事情.
&n ...
- 10:37
- 浏览 (285)
- 评论 (0)
http://ajaxanywhere.sourceforge.net/index.html
AjaxAnywhere利用JSP标签把Web页面标注出可以动态装载的区域, 可以直接把任何JSP页面转化为AJAX感知组件而不需要进行复杂的Javascript编码.
<script> ajaxAnywhere.getZonesToLoad = function(url){ return "countriesList"; } </script>
&nb ...
witrix平台中的tpl模板技术的重点在于标签定义的设计, 在于如何最大限度的发挥xml格式的表达能力。
tpl自定义标签的基本结构如下:
<Namespace:TagName tpl:tag="realTagName"
tpl:noborder="${booleanExprInCompileContext}"
&nb ...
- 23:09
- 浏览 (429)
- 评论 (0)
- 分类: Witrix开发平台
经济学的核心概念是合同(contract),多个利益主体(具有不同的价值目标)在交互中达成一致协议。这本质上是个多目标优化的问题。这与物理学的精
神是有着本质区别的。物理学传统上认为世界是完美的,存在着唯一的真理。根据Lagrange原理,最低能量原理等,物理世界总是在众多可比的备选结构中
选择那唯一最优的结果。在经济学中不存在唯一的价值取向,并不是所有的事物之间都是能够进行比较并排出座次的。比如,我们大多数人会认为10个老婆饼比一
个老婆饼好,10个葱油饼比一个葱油饼好,10个老婆饼加10个葱油饼比一个老婆饼加一个葱油饼好,但是10个老婆饼和10个葱油饼 ...
- 17:59
- 浏览 (318)
- 评论 (0)
过程控制的要点是哪些?我从以下几点来考虑这个问题。
第一点是测量,衍生出定义,标识,记录,评判等。测量需要在具有分歧的变化之处进行(与其它过程的交连之处)。
第二点是预测,预测不准的原因一般是信息不足或者是非线性。确定性系统中可以产生貌似随机的混沌现象。物理学中混沌控制的基本要点是缩短控制间隔,尽量利
用确定性的信息,而且间隔减小之后,多半可以部分恢复线性。此外,控制所需的信息也并不需要是整个动力学过程的全部信息,只需要是某个动力学切面上的信息
即可。
第三点是控制点的选择,控制点分为时点(时机)和位点(对象)。有时需 ...
quartz是一个高质量的任务调度软件包。其主要组成部分为:
Scheduler接口: quartz的执行线程,它根据Trigger决定调度时刻,根据JobDetail的说明实例化并运行Job
JobDetail类: 可持久化的任务描述信息。任务虽然分组,但是仅用作管理标示,任务之间并无实质性关联, 例如无法定义job chain。
Trigger类:任务的调度策略。这里的特点是调度策略与任务描述分开,调度策略和任务描述都可以分别在Scheduler注册,然后再关联起来。JobDetail与Trigger的关系是一对多。
JobDataMap: 将任务的运行时可持久化状态信息从JobD ...
hibernate等O/R
Mapping软件包中使用javabean来作为数据的载体, 但这些bean一般除了get/set等数据访问方法之外没有什么其它的业务方法。
前一段时间有人认为这是所谓贫血的领域模型(Anemia Domain Model),引发了一场讨论。
其实这些bean的作用仅是表达了领域内的数据关系, 本身并不可能作为完整的领域模型层存在。
在数据层,我们所需要的是数据对外暴露,因为我们无法预知这些数据的使用方式,
就象是实验数据发表出来以后你无法预知别人如何分析一样,这时信息流是开放的,向外的:信息在这里,放马过来吧。
而在业务逻辑层,复杂的逻辑控制交织在一 ...
- 17:53
- 浏览 (378)
- 评论 (0)
- 分类: Witrix开发平台
在程序中需要返回一个数据集合的时候, 应该尽量选用标准的Java集合类接口,例如List, Map等.
有时也见到有人选择返回Iterator对象, 一般情况下这不是很好的选择. Iterator对象的功能有限, 而且存在一种即时消费的特点,
我们一般不能把一个Iterator保存起来留待以后使用. 而且JDK提供的集合类也不能从Iterator直接构造出来,例如没有 new
ArrayList(myIterator), 这样为数据复制造成一定的困难.
Iterator在理论上的好处之一是可以支持延迟加载数据, 但是 ...
- 11:04
- 浏览 (368)
- 评论 (0)
- 分类: Witrix开发平台
Ivar Jacobson 在其著作"Aspect-Oriented
Software Development with Use Cases"中将AOP(Aspect-Oriented
Programming)上升为一种贯穿软件开发全生命周期的设计技术,由建筑学的隐喻引出了decoration overlay(existion
+
extensions)的策略。在建筑学中,首先基础设计图规划了房间的空间划分,电气工程师基于这张基础图决定电气设施排布图,而装修设计师可能依据基
础设计图决定装修方案。所有这些扩展(extension)设计图叠加到基础设计图之上构成的最终设计方案决定了房 ...
- 11:03
- 浏览 (293)
- 评论 (0)
交叉表(Cross Table)的基本特点是具有横纵两个自由延展的维度,而平面表结构只有一个可延展的维度,因为平面表的列名和列数是确定的。例如,地区的产品销售数量,在平面表中表达为
district_id product_id sell_num
如果表现为交叉表,则为
productA productB
districtA sellNum sellNum
districtB sellNum& ...
- 11:02
- 浏览 (347)
- 评论 (0)
- 分类: Witrix开发平台
数据导出的功能大致可以分解为三个部分: 1. 从数据源读取一条记录 2. 将一条记录导出为指定格式 3. 循环调用1和2
首
先我们需要一种机制来对外暴露数据源(一种Container)中的数据,Iterator模式恰能满足要求。其次,我们需要一种机制来对一系列数据进行
处理,这对应于Visitor模式。第三,在组合Iterator模式和Visitor模式的处理过程中,我们需要表达出平面表数据集的基本特征。
在witrix平台中,平面表数据导出和转换通过TablePageProcessor对象来完成,
class TablePageProcessor{
IPageViewer vi ...
- 11:01
- 浏览 (348)
- 评论 (0)
- 分类: Witrix开发平台
分页的功能由两部分组成:取数据和计算分页。其中取数据的功能由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(){}
publi ...
- 11:00
- 浏览 (421)
- 评论 (0)
- 分类: Witrix开发平台
java中最常用的数据结构类型是Map和List,
它们也是Container的两种基本模式,一个是根据特征值定位,一个是根据地址定位。
它们共同的一个特征是表达了数据之间的直接的,短程的一种相关性。另一种常见的数据结构Tree则表达了数据之间的一种长程的关联:根节点与其所有层次上
的子节点之间都存在着关联。 文件系统,组织机构, XML文档等都可以对应为Tree数据结构。在描述树形结构的时候,我们经常使用XML文件,
但是XML文件在程序中操纵起来并不方便,这其中的一个重要原因是XML是面向文档的,即操纵XML的API返回的和使用的都只能是文本字符串,而不能直
接使用程序中常见的其他数据结构 ...
- 10:59
- 浏览 (396)
- 评论 (0)
- 分类: Witrix开发平台
CRUD(Create, Read,Update, Delete)操作中最难处理的是查询。因为查询总是多样化的,如果每个特定查询调用都编制一个对象方法,则维护量太大且扩展性很差。如果编制一个通用的
查询接口,一般的做法是直接以SQL文本作为参数,但这样就几乎丧失了封装的意义。这里的核心问题是Query本身是复杂的,我们应该将它对象化为一个
类,在程序中控制Query的结构,而一个文本对象与一个复杂的Java结构对象的差异就在于对于文本对象我们很难有什么假定,因而在程序中也很难编制通
用的程序对其进行处理,一般只能对它进行传递。实际上,文本中描述的结构存在于java程序 ...
- 10:58
- 浏览 (339)
- 评论 (0)
新手总是有很多不好的代码习惯. 最常见的一个是不使用临时变量.例如
for(int i=0;i<myList.size();i++){
otherList.get(i).getSomeVar().getName();
otherList.get(i).getSomeVar().getValue();
}
...
软件世界与真实的,物理的世界有着本质的不同,其中一点在于软件中的规则是根据需求制订的而不是先验的。我们在研究物理世界的时候,多少会有些唯物主义,
即纷繁芜杂的表象下蕴含着自恰的,不变的规律。物理学的建模是多方位的,多层次的。同一个规律,在不同的简化条件和不同的环境中我们会赋予它不同的名字。
在不同的抽象层面上,我们也可能会建立不同的模型。严格的说起来,这些模型之间可能存在着不一致性,但我们相信,存在着一个绝对精确的模型:无限的细节,
无限的关联,完美的,自恰的,而我们所建立的所有物理模型都只是对该终极模型在某个层次,某个角度上的近似抽象,而每一个模型都有着 ...
- 20:10
- 浏览 (291)
- 评论 (0)
有人认为jsplet中使用session是个缺点,关于这一点,我想起一件以前听来的事情。我们都知道Linux的内核是常驻内存,不换页的(不知道最
新的内核是否已经有所改变),Torvalds认为内核换页对系统性能有巨大影响,是愚蠢的想法,所以Linux内核不能换页。据陈榕说,NT内核是可换
页的,而微软内部有一个小组,专门编写工具,对已经编译好的操作系统二机制代码进行优化,调整,最终结果是NT内核可以换页,但几乎不换页,这才是微软可
怕的技术实力。
对于简单的应用,session可以随意使用,而对那些性能要求极高的应用,每一个系统架构师都会如履薄冰,简单的依靠全局Cache不是真正的解决方
案 ...
- 20:07
- 浏览 (464)
- 评论 (0)
- 分类: Witrix开发平台
在时间轴上定位一般比较麻烦,我们可以编写大量的get函数来得到特殊时间点,如
getFirstDayOfMonth(int year,int month), getFirstDayOfNextMonth(int
year, int month),这不如采用如下正交化的流式设计。EasyCalendar cal =
new EasyCalendar().toYear(2001).toMonth(1).toFirstDayOfMonth().toFirstDayOfWeek();
tpl是witrix开发平台中的动态xml标签技术,其基本特点表现为如下三个方面:1. 执行能力 xml本身只是对数据的描述,而没有循环和判断的能力。 在tpl中<c:forEach>和<c:if>标签可以完成程序语言的执行功能,并定义了<c:tile>, <c:iif>等更方便的标签。
2. 抽象能力 获得抽象能力,首要的一点是使得创建新概念的成本极低。很少有人大量开发jsp tag,原因就是开发tag过于麻烦,而且调整不方便。另外开发出的tag如果粒度太小,大量使用的时候是对性能的致命伤害。&nbs ...
- 19:23
- 浏览 (567)
- 评论 (0)
- 分类: Witrix开发平台
经常有人说XX技术是面向复杂应用的,对于常规应用如果采用那是得不偿失。我想很多情况下这只是体现了该技术的不适
应性。我主张系统设计应该尽量体现一种共振原则,即系统架构只有一个,但是面向复杂的应用,它表现出复杂的特性,能够辨识精细的概念,而面向简单应用,可
以实现一种优雅的退化(degradation),
对外暴露出一种简单的结构。抽象的说,我们所建立的不是一个孤立的模型,而是一个模型的系列,不是一个绑定应用的solution而是一种
strategy,在每一个复杂性层次上,都存在着对应的解决方案,而不同复杂性层次上的模型之间又存在着清晰的演化路径。这也是我所提出的级列设计理论
的要点之一。
在 ...
关于jsplet中的object生命周期的管理以及使用拉模式,如果套用现在流行的设计术语,那就是涉及到所谓的IoC设计(控制反转) IoC
的Container现在很受追捧,
但真正的IoC设计思想并没有引起大家的重视。也许大多数人使用的都是成品吧,以至于把成品的功能等价于其所依赖的设计原理。Spring等所建立的
IoC更准确的说法是Dependency
Injection,只是IoC的一种体现。其基本思想是一个对象并不控制所有与它相关的部分,而是把控制权交给使用对象的人。这里重要的就是控制流(信
息流)的反转。 对象生命周期的管理也是这样,并不是由一个Manager猜测用户是否使用该对象, ...
- 12:34
- 浏览 (666)
- 评论 (0)
- 分类: Witrix开发平台
jsplet中的对象化并不是一种巧妙的trick,而是一种设计上的必然。现在大家言
必称OO,可OO到底意味着什么,除了书本上的话语,你能不能用自己的话描述一下,能否体会到那种必然。OO如果是一个有效的概念,它在软件以外的领域是
否有着对应。按照早期教科书的说法,OO是为了模拟现实世界,这种说法只是反映了设计上的一种困境,一种思想上的贫乏。面向对象最直接的意义在于标示了状
态与行为之间的耦合,此后在程序中可以用一种显示的,一致的方式来操纵这个集合体。在界面上,我们看到一个组件,在模型层,我们看到的还是那个对象,在配
置文件里我们还能清晰的辨别出它来。可在webwork这种面向action的框架 ...
- 12:34
- 浏览 (619)
- 评论 (0)
- 分类: Witrix开发平台
引用:如果在Action Centric的框架,要避免两个访问点,可以这么定义。 view.do?&templateName=a &objectName=/@Demo&objectEvent=test
这
种做法就是程序自己处理而不是框架支持了。我说过,工作就是那么多,只是框架做什么和程序作什么的分工而已。说jsplet是page为中心也不太准确,
jsplet是以对象为中心,只是指定了希望使用的视图页面而已。view.jsp放在前面只是jsp实现上的一个问题,
引用:Action Centric 确实比较麻烦,必须同时传入角色列表 和 用户列表的 分页信息。 ...
- 12:33
- 浏览 (788)
- 评论 (1)
- 分类: Witrix开发平台
- 浏览: 107274 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
链接
最新评论
-
关于REST
说的太抽象,看完之后好像是理解了,又好像很模糊。
-- by zjq_blog -
[导入]关于jsplet的一些 ...
我有一个疑问:把一个request || response带入到biz里面会不会 ...
-- by deepthink -
C++配置管理
boost里已经有现成的啦!
-- by jimmy_c -
不完全的计算
当我们 oo 的时候,一般都不认为自己在“计算”,当我们计算的时候,根本就想不起 ...
-- by hotman_x -
面向集合的框架设计
嘿嘿,说句不合时宜的话,一个事物“完美”是因为它已经没有价值,没有改进的必要。费 ...
-- by hotman_x






评论排行榜