jdon 解惑授道,企业信息化解决之道
 
JdonSD设计
JdonSD结构
JdonSD性能


 

 

 

 

Jdon框架演示

JiveJdon3.0
源码下载

GoF设计模式

在线教程

社区精彩讨论

 





数据操作通用框架的使用

  举例如下,以网上商店中的“商品”为数据对象,看看使用本框架系统是如何被方便地使用?

  3.1 数据建模:


  首先是数据建模,这是最重要的起点,确定商品的数据结构,以建立商品数据模型,如下:


public class Product implements Model {
  private String productId; //商品ID
  private String catId; //商品目录ID
  private String name; //商品名称
  private String description; //商品描述
  private Collection items = new ArrayList(); //商品细目

  public Product(){ }
  //构造方法
  public Product(String productId, String name, String description){
    this.productId = productId;
    this.name = name;
    this.description = description;
  }

  //set或get方法
  public String getProductId() { return productId; }
  public void setProductId(String productId) {
    this.productId = productId;
  }
  ……
}



  其次,建立商品数据表,如下:


CREATE TABLE product(
  productId char(10) NOT NULL,
  name varchar(100) DEFAULT '' , #产品名称
  imagePath varchar(200) DEFAULT '' , #图片
  description text DEFAULT '' , #详细描述 可html
  PRIMARY KEY (productId)
)TYPE=InnoDB;

 

  3.2 EJB开发配置

  第一:创建Session Bean ProductManager,接口如下:
  public interface ProductManagerLocal extends javax.ejb.EJBLocalObject {
    //商品数据增加
    public void createProduct(EventModel em) throws Exception;
    //商品数据修改
    public void updateProduct(EventModel em) throws Exception;
    //商品数据删除
    public void deleteProduct(EventModel em) throws Exception;
    //商品查询
    public Product getProductById(String Id);

    。。。。
  }

   第二:EJB配置,如果使用JBuilder图形化开发,这个过程是自动的)

  3.3 Web模板式开发

   首选是开发商品数据模型的“处理器”,专门实现EJB和前台界面之间的操作传递,这些传递功能的代码可以拷贝,不同数据模型,这个处理器功能代码基本相同,主要完成下面两个功能:
  1. 根据主键从EJB中获得存在的数据模型。
  2. 接受用户界面的操作,调用EJB的的新增、修改、删除等功能。

  下面以Product模型为实例:

 

public class ProductHandler implements ModelHandler {
  private final static String module = ProductHandler.class.getName();

  private final static ServiceServerFactory sf = ServiceServerFactory.getInstance();
  protected final static CacheFactory cacheFactory = CacheFactory.getInstance();

  //初始化ModelForm实例
  public ModelForm initForm(HttpServletRequest request) throws Exception{
    ProductForm form = new ProductForm();
    return form;
  }

   //通过EJB从数据库中根据主键获得商品数据
  public Model findModelByKey(String keyValue, HttpServletRequest request) throws   
   Exception{
    ProductManagerLocal productManager = (ProductManagerLocal) sf.getService(
     FrameworkServices.ProductEJB, request);
    return productManager.getProductById(keyValue);
  }

   //接受用户界面的数据操作
  public void serviceAction(EventModel em, HttpServletRequest request) throws
  java.lang.Exception {
    ProductManagerLocal productManager = (ProductManagerLocal) sf.getService(
      FrameworkServices.ProductEJB, request);
    try {
      switch (em.getActionType()) {
        case Event.CREATE:
          productManager.createProduct(em);
          break;
        case Event.EDIT:
          productManager.updateProduct(em);
          break;
        case Event.DELETE:
          productManager.deleteProduct(em);
          break;
      }
    } catch (Exception ex) {
        throw new Exception("System operation Error:" + ex);
    }
  }


  程序开发完成后,需要在web.xml中配置对EJB的JNDI调用,如下:
  <ejb-local-ref>
    <ejb-ref-name>ejb/ProductManager</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local-home>com.jdon.estore.catalog.ProductManagerLocalHome</local-home>
    <local>com.jdon.estore.catalog.ProductManagerLocal</local>
    <ejb-link>ProductManager</ejb-link>
  </ejb-local-ref>

  以Item模型为实例:

public class ItemHandler extends ModelHandler {
  private final static String module = ItemHandler.class.getName();
  private final static ServiceServerFactory sf = ServiceServerFactory.
    getInstance();

  public ModelForm initForm(HttpServletRequest request) throws Exception {
    ItemForm form = new ItemForm();

    String productId = request.getParameter("productId");
    if ( (productId == null) || (productId.length() == 0))
      throw new Exception("productId is null");
    form.setProductId(productId);
    return form;
  }

  public Model findModelByKey(String keyValue, HttpServletRequest request) throws
    Exception {
    ProductManagerLocal productManager = (ProductManagerLocal) sf.getService(
    FrameworkServices.ProductEJB, request);
    return productManager.getItemById(keyValue);
  }

  public void serviceAction(EventModel em, HttpServletRequest request) throws
  java.lang.Exception {

    ProductManagerLocal productManager = (ProductManagerLocal) sf.getService(
      FrameworkServices.ProductEJB, request);

    try {
        switch (em.getActionType()) {
        case Event.CREATE:
          productManager.createItem(em);
          break;
        case Event.EDIT:
          productManager.updateItem(em);
          break;
        case Event.DELETE:
          productManager.deleteItem(em);
          break;
        }
    } catch (Exception ex) {
        throw new Exception("System operation Error:" + ex);
    }
}

}


对比ItemHandler和ProductHandler,两者代码几乎一致,这种模板式开发减少了琐碎工作的差错,节省开发时间。无需遵循Struts标准实现很多Action类。

 

  3.4 Struts-config.xml和modelmapping.xml配置

  struts-config.xml配置为struts的标准配置文件,每个数据模型需要三行配置:
  1. ActionForm的配置
  2. 界面输出配置
  3. 接受界面输入
  
   这三行配置对于不同数据模型都是相同的,代码可以拷贝,不同的就是相应的ActionForm值。

<struts-config>
  <form-beans>
   <form-bean name="productForm" type="com.jdon.estore.web.catalog.ProductForm" />

   <form-bean name="productForm" type="com.jdon.estore.web.catalog.Product2Form" />
  </form-beans>
  <action-mappings>
      <!-- 本action实现界面输出,不同数据模型,可以拷贝这段代码,只要修改
      productForm为新的数据模型的ModelForm,以及Jsp文件名修改 -->
      <action attribute="productForm"
        type="com.jdon.strutsutil.ModelViewAction"
        validate="false"
        scope="request"
        path="/admin/productAction">
      <forward name="create" path="/admin/product.jsp" />
      <forward name="edit" path="/admin/product.jsp" />
      </action>

      <!-- 本action接受界面输入,不同数据模型,可以拷贝这段代码,只要修改
      productForm为新的数据模型的ModelForm以及Jsp文件名修改 -->

      <action name="productForm"
        type="com.jdon.strutsutil.ModelSaveAction"
        input="/admin/product.jsp"
        scope="request"
        path="/admin/saveProductAction">
      <forward name="success" path="/admin/productOk.jsp" />
      <forward name="failure" path="/admin/productOk.jsp" />
      </action>
  </action-mappings>
  </struts-config>

struts-config.xml的配置也是模板化,拷贝粘贴就可以,不同的是ActionForm和Jsp名称不一样。

 

  为了能使用Web层的增删改查框架,需要实现modelmapping.xml配置,如下:
  <modelmappings>
    <modelmapping formName = "productForm"
            key="productId"
            model="com.jdon.estore.model.Product"
            handler = "com.jdon.estore.web.catalog.ProductHandler" />
  </modelmappings>

   其中的formName是struts-config.xml的ActionForm名称。
    key是数据模型的主键。
    Model是数据模型类,本类在前面已经列出。
    Handler是数据模型处理器,本类已经在前面列出。

  3.5 Jsp的编写

   Jsp是纯Html语法编写,适合非专业人员,如美工设计等。

   商品数据的增删改查界面是在一个JSP里实现,如product.jsp:
   <html:form action="/admin/saveProductAction.do" method="POST" >
      <html:hidden property="action" />
      <!- - 本行是关键,表明是新增还是删除或修改 -- >

      <html:hidden property="productId"/>
      商品名称:<html:text property="name" size="20" />
      商品说明:<html:textarea rows="4" cols="32" property="description"/>
      <html:submit property="submit" value="保存"/>
      <html:reset value ="复位"/>
   </html:form>

优点

  1. 实际开发过程中,数据模型字段不断变化,使用本框架,只要轻松更改三次就可实现全部修改:数据库字段修改;Product数据模型字段修改;Jsp显示字段修改。这三种修改工作非常容易和轻松。

  2. 最大化省略了数据增删改查等琐碎开发工作,如果一个系统数据模型达到数百之多,使用本框架效率和质量就非常明显。

  3. 由于降低了琐碎工作,因此可以将更多精力集中在Jsp页面显示,客户要求的显示或打印格式可是五花八门,有本框架在后面做支撑,那些又苦又累的活变成了轻松、富有创造力的配置工作了。

  4. 可以快速开发出系统原型,由于数据增删改查是软件系统最基础的功能,使用本框架快速开发完成后,基本就完成了系统的原型,在短时间内能够给客户看到真正的互动的原型界面(不是Html做的假界面噢!),从而能真正摸清客户所需要,再也不怕客户反反复复地修改了。

  5. 客户需求变化有多快,我就有多快!

 

 





联系我们 | 关于我们 | RSS订阅 | 广告联系 | 网站地图 | 加入收藏夹
Copyright (C) 2006 Jdon.com, All Rights Reserved 版权所有 上海解道计算机技术有限公司
沪ICP备05018152号 如有意见请与我们联系 Powered by JdonFramework