首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Eclipse 任务列表(3)记号和任务列表进一步抽象

Eclipse 任务列表(3)记号和任务列表进一步抽象

进一步抽象XM 一直围绕这两个组件来组织:核心,独立于 Eclipse 并提供命令行界面;Eclipse 插件。要将 XM 移植到其他界面,只需要像         Messenger(请参阅 )那样抽象用户界面的接口即可。我曾经为一些项目定义了 Eclipse 之上的 servlet 用户界面。      
虽然我计划进一步加强 XM 与 Eclipse 的集成,但是也想保留命令行选项。两种界面各有自己的用途。对于日常操作而言,我多数时间都在用 Eclipse 环境,但是命令行版本对于 crontab(计划工作执行的一种 UNIX 工具)非常方便。为了同时支持两种方式,我抽象了 XM 核心引擎中的资源和文件。
最初的 XM 使用的是 JDK         File 对象,以后您会看到它是造成多数集成问题的根源,Eclipse 没有使用         File 对象。相反,它使用了自己的         IResource 接口。此外,经验告诉我,依靠         File 有很大的局限性。Eclipse 不是惟一没有使用文件的软件包,SAX 使用         InputSource,而 JAXP 使用         Source。      
如果代码需要和几种不同的库进行交互该怎么办?可以使用代理模式(请参阅 )来抽象各个库。在代理模式中,由一个(或多个)对象为底层的库提供通用的接口。可以实例化该对象,把请求转发给任何一个库。采用这种模式的好处是,调用代码时无需担心代理要转发的库。      
XM 引入         Filename 接口来抽象文件或资源的概念。        Filename 已经在 Eclipse         IResource(为了在 Eclipse 内使用)和 JDK         File 对象(为了在命令行中使用)上得以实现。清单 3 是         Filename 的声明。Eclipse 专用版提供了源代码(请参阅 )。      
清单 3. 文件和资源的抽象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package org.ananas.xm.core;
import java.io.File;
import org.xml.sax.InputSource;
import org.ananas.xm.core.XMException;
public interface Filename
   extends CoreConstants
{
   public boolean isRoot()
      throws XMException;
   public boolean isFile();
   public boolean isFolder()
      throws XMException;
   public boolean exists()
      throws XMException;
   public String getName()
      throws XMException;
   public String getShortName()
      throws XMException;
   public String getSuffix()
      throws XMException;
   public String getProjectPath()
      throws XMException;
   public Filename getParent()
      throws XMException;
   public Filename[] getChildren()
      throws XMException;
   public void setPersistentMetadata(String key,String value)
      throws XMException;
   public void setPersistentMetadata(String key,String[] values)
      throws XMException;
   public void setTransientMetadata(String key,Object value)
      throws XMException;
   public Object getMetadata(String key)
      throws XMException;
   public String getMetadataAsString(String key)
      throws XMException, ClassCastException;
   public String[] getMetadataAsArray(String key)
      throws XMException, ClassCastException;
   public File asFile()
      throws XMException;
   public InputSource asInputSource()
      throws XMException;
   public Object asPlatformSpecific()
      throws XMException;
   
   public boolean hasSamePath(Filename document)
      throws XMException;
   public boolean isDescendantOf(Filename document)
      throws XMException;
   public boolean remove()
      throws XMException;
}




XM 核心中的所有类(如         Messenger)都使用         Filename 进行了改写。
返回列表