论坛首页 Java企业应用论坛

咱不谈代码生成器了,咱谈谈配置XML来实现基本逻辑,欢迎拍砖

浏览 12042 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-01-27  
xml不适合做逻辑早就是老生常谈了。所以,如果只是用xml实现一些在java里面很容易搞定的if/else之流,确实是自己找罪受。

但是,事务都有两面,我们要用辩证唯物主义的观点来看待矛盾。
也不是说拿xml写逻辑就一无是处。对java所不擅长的那部分逻辑,用xml也是一法(当然,用脚本也是可行的)

那么,什么逻辑java这类传统的oo语言不擅长?就是所谓的“高阶逻辑”了。

比如rule engine,即使产品提供了api可以让你用java来操作规则,其语法也一定非常繁琐难看。

再比如ioc容器,好好的"new A(new B(),new C())",在pico那里变成:
"new ConstructorComponentAdapter(A.class, new Parameter[]{new ComponentParameter(new ConstructorComponentAdapter(B.class)), new ComponentParameter(new ConstructorComponentAdapter(C.class))})"
烦的要死(我这个pico代码只是示意,不一定准确)。


要是再稍微加点逻辑进去,比如:
B b = new B();;
C c = b.getC();;
new A(b, c, c.getName(););;

老大,用pico的手工配置方式在java里面写,等着发疯吧。


为什么不能在java里面直接new A(new B(), new C())呢?因为组件依赖注射是个高阶逻辑,这里面除了动态加载类之外,还有类似auto-wiring之类的服务被封装在高阶逻辑里面。

此时,直接拿java之类的传统oo语言就力不从心了。

可以有两个解决方案:

1。脚本。利用某些支持高阶逻辑的脚本,我们可以写出最简洁的代码:

ctor {class="A", args=[ctor "B", ctor "C"]}

以及
do
  b <- ctor "B"
  c <- method b "getC"
  ctor {class="A" args=[b, c, method c "getName"]}



2。xml写逻辑,可能结果是这样:
<ctor class="A">
  <args>
    <ctor class="B"/>
    <ctor class="C"/>
  </args>
</ctor>

以及
<sequence id="a">
  <ctor var = "b" class="B"/>
  <method var="c" component="b" name="getC"/>
  <method var="name" component="c" name="getName"/>
  <ctor class="A" args="$b,$c,$name"/>
</sequence>



无论如何,此时xml写逻辑比用java写要简洁清楚多了。
0 请登录后投票
   发表时间:2006-02-03  
我觉得用xml来表达逻辑也没啥不好的, 关键是得有UI来配合,

象一些描述语言, 象RDL(Report Definition Language), DSL (Domain-Specific Language ), 都是基于xml的, 我想原因是因为xml容易parse, UI实现起来比较简单。
0 请登录后投票
   发表时间:2006-02-04  
B b = new B();; 
C c = b.getC();; 
new A(b, c, c.getName(););; 


是否考虑过,如果直接用教本表达? 而不是xml配置呢?


<ctor class="A"> 
  <args> 
    <ctor class="B"/> 
    <ctor class="C"/> 
  </args> 
</ctor>


确实有其方便之处,问题是你必须为了解析这样的配置写一一对应的解析代码。扩展性会很差的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics