`
阿尔萨斯
  • 浏览: 4185756 次
社区版块
存档分类
最新评论

webx—业务逻辑之结果集封装

 
阅读更多

目前的web程序一般都是基本MVC模式来设计的,其优势就是有效的实现Web系统的职能分工。

MVC模式,M(Model)是指数据模型,V(view)是指用户界面,C(controller)则是控制器

其中:

a) 视图主要是用户看到并与之交互的界面。通俗来讲由Html、jsp、php、asp、velocity 等语言组件来解析显示

b)控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据

c)模型表示企业数据和业务规则,其拥有最多的处理任务。


其中模型这块在整个分层中起着至关重要的作用,因为它涉及了整个数据的业务逻辑处理、数据组装、数据存储等重要步骤,粗略来讲整个后台代码(action-biz-dal)都是为model来服务的。

1> web展示层只是做简单的参数的获取(如request.getParameter(),request.getRemoteAddr(),loginId的获取)、参数类的封装(*QueryParam)、以及相关服务接口的调用、以及对接口返回数据的组装。

2> dal数据持久层,主要是对表数据的操作(包括 insert、update、delete、select),操作对象一般为oracle、mysql等关系型数据库
以ibatis为例,该层涉及代码结构:DO类(DataObject)的定义;*SQL.xml配置文件的定义;DAO接口定义;Dao接口的实现;

3> biz业务逻辑层,基本上整个业务的逻辑处理都是在该层完成的,通过dal层与底层的数据库打交道,处理完的数据会返回给web层。
返回给web层的类模型结构通常包含以下几部分:操作是否成功;错误信息;结果集数据Model

接口:
public interface Result extends Serializable {
    /** 在models表中代表默认的model的key。 */
    String DEFAULT_MODEL_KEY = "_defaultModel";

    /**
     * 请求是否成功。
     *
     * @return 如果成功,则返回<code>true</code>
     */
    boolean isSuccess();

    /**
     * 设置请求成功标志。
     *
     * @param success 成功标志
     */
    void setSuccess(boolean success);

    /**
     * 取得结果代码。
     *
     * @return 结果代码
     */
    ResultCode getResultCode();

    /**
     * 设置结果代码。
     *
     * @param resultCode 结果代码
     */
    void setResultCode(ResultCode resultCode);

    /**
     * 取得默认model对象的key。
     *
     * @return 默认model对象的key
     */
    String getDefaultModelKey();

    /**
     * 取得model对象。
     * 
     * <p>
     * 此调用相当于<code>getModels().get(getDefaultModelKey())</code>。
     * </p>
     *
     * @return model对象
     */
    Object getDefaultModel();

    /**
     * 设置model对象。
     * 
     * <p>
     * 此调用相当于<code>getModels().put(DEFAULT_MODEL_KEY, model)</code>。
     * </p>
     *
     * @param model model对象
     */
    void setDefaultModel(Object model);

    /**
     * 设置model对象。
     * 
     * <p>
     * 此调用相当于<code>getModels().put(key, model)</code>。
     * </p>
     *
     * @param key 字符串key
     * @param model model对象
     */
    void setDefaultModel(String key, Object model);

    /**
     * 取得所有model对象。
     *
     * @return model对象表
     */
    Map getModels();
}
实现类:
public class ResultSupport
        implements Result {
    private static final long serialVersionUID = 3976733653567025460L;
    private boolean           success         = true;
    private ResultCode        resultCode;
    private Map               models          = new HashMap(4);
    private String            defaultModelKey;

    /**
     * 创建一个result。
     */
    public ResultSupport() {
    }

    /**
     * 创建一个result。
     *
     * @param success 是否成功
     */
    public ResultSupport(boolean success) {
        this.success = success;
    }

    /**
     * 创建一个result。
     *
     * @param success 是否成功
     */
    public ResultSupport(boolean success, ResultCode resultCode) {
        this.success    = success;
        this.resultCode = resultCode;
    }

    /**
     * 请求是否成功。
     *
     * @return 如果成功,则返回<code>true</code>
     */
    public boolean isSuccess() {
        return success;
    }

    /**
     * 设置请求成功标志。
     *
     * @param success 成功标志
     */
    public void setSuccess(boolean success) {
        this.success = success;
    }

    /**
     * 取得结果代码。
     *
     * @return 结果代码
     */
    public ResultCode getResultCode() {
        return resultCode;
    }

    /**
     * 设置结果代码。
     *
     * @param resultCode 结果代码
     */
    public void setResultCode(ResultCode resultCode) {
        this.resultCode = resultCode;
    }

    /**
     * 取得默认model对象的key。
     *
     * @return 默认model对象的key
     */
    public String getDefaultModelKey() {
        return StringUtil.defaultIfEmpty(defaultModelKey, DEFAULT_MODEL_KEY);
    }

    /**
     * 取得model对象。
     * 
     * <p>
     * 此调用相当于<code>getModels().get(DEFAULT_MODEL_KEY)</code>。
     * </p>
     *
     * @return model对象
     */
    public Object getDefaultModel() {
        return models.get(getDefaultModelKey());
    }

    /**
     * 设置model对象。
     * 
     * <p>
     * 此调用相当于<code>getModels().put(DEFAULT_MODEL_KEY, model)</code>。
     * </p>
     *
     * @param model model对象
     */
    public void setDefaultModel(Object model) {
        setDefaultModel(DEFAULT_MODEL_KEY, model);
    }

    /**
     * 设置model对象。
     * 
     * <p>
     * 此调用相当于<code>getModels().put(key, model)</code>。
     * </p>
     *
     * @param key 字符串key
     * @param model model对象
     */
    public void setDefaultModel(String key, Object model) {
        defaultModelKey = StringUtil.defaultIfEmpty(key, DEFAULT_MODEL_KEY);
        models.put(key, model);
    }

    /**
     * 取得所有model对象。
     *
     * @return model对象表
     */
    public Map getModels() {
        return models;
    }

    /**
     * 转换成字符串的表示。
     *
     * @return 字符串表示
     */
    public String toString() {
        StringBuffer buffer = new StringBuffer();

        buffer.append("Result {\n");
        buffer.append("    success    = ").append(success).append(",\n");
        buffer.append("    resultCode = ").append(resultCode).append(",\n");
        buffer.append("    models     = {");

        if (models.isEmpty()) {
            buffer.append("}\n");
        } else {
            buffer.append("\n");

            for (Iterator i = models.entrySet().iterator(); i.hasNext();) {
                Map.Entry entry = (Map.Entry) i.next();
                Object    key   = entry.getKey();
                Object    value = entry.getValue();

                buffer.append("        ").append(key).append(" = ");

                if (value != null) {
                    buffer.append("(").append(ClassUtil.getClassNameForObject(value)).append(") ");
                }

                buffer.append(value);

                if (i.hasNext()) {
                    buffer.append(",");
                }

                buffer.append("\n");
            }

            buffer.append("    }\n");
        }

        buffer.append("}");

        return buffer.toString();
    }

boolean success:表示操作是否成功
ResultCode resultCode:错误信息
Map models:返回的结果集
web层通过接口调用获取到相应的Result对象后,通过result.isSuccess() 来分支处理。
 if (result.isSuccess()) {
            context.put("keyA", result.getModels().get("key1"));
        } else {
                context.put("errorMsg", result.getResultCode().getMessage());   //定义的错误信息
          
        }



分享到:
评论

相关推荐

    Webx3.0小结

    webx3.0学习小结

    webx2.7绿色安装

    WEBX是阿里巴巴的内部框架,“就是把页面与Service层之间的一些Servlet等公共的东西抽象出来,提供相应的服务以提高开发效率(《接口测试之Webx简介》—何晓峰 )”,可以看出,webx和传统的servlet-action模式的...

    webx框架指南

    阿里开源框架webx的文档,想要学习webx或者维护webx的开发者可以下载

    创建简单的WEBX应用

    webx框架(淘宝框架),webx+spring+ibatis

    webx

    NULL 博文链接:https://xj84.iteye.com/blog/1850955

    Webx及框架简介

    Webx及框架简介 ppt 格式

    webx总结 项目实践总结

    webx3 启动顺序,webx使用总结,webx表单提交(感觉你还是看webx文档 貌似更加好哦!那个表单提交写的很是详细)

    淘宝WEBX框架详解

    WEBX框架详解,更好的了解Taobao的开发过程,对于新手更容易上手。

    webx3文档——web开发

    该文档为官方webx框架文档,对webx进行了全面的讲解,非常实用。

    Webx介绍_PDF

    淘宝开源Web开发框架Webx3.0介绍,内附宠物店程序作为例子详细解说webx框架的方方面面。

    webx_guide

    快速使用 webx 开发web 应用 Webx框架指南 Michael Zhou

    阿里巴巴J2EE Webx框架简介

    阿里巴巴内部J2EE平台 Webx框架简介,现在是webx3.0,而且已经开源!

    webx入门介绍

    webx框架是淘宝开发的比较流行的框架,这个是webx框架的入门介绍

    Webx3_Guide_Book.pdf 用户指南

    • 2002年,选择Jakarta Turbine作为WEB框架,并开始在此之上进行扩展。 • 2003年,经过大约一年的扩展,框架开始成熟。我们私下称这个经过改进的Turbine框架为 Webx 1.0。 • 2004年,借着淘宝网的第一次改版,...

    WebX入门指南示例程序

    WebX入门指南示例程序,通过结合博文:http://blog.csdn.net/fiboliu/article/details/50040273和代码讲解了,WebX入门级的使用指南!

    通用WEB框架 Webx.zip

    通用WEB框架 Webx ,Webx是建立在Java Servlet API基础上的的通用WEB框架。用Webx搭建的应用可以...

    项目中用到的webx

    1.webx是阿里巴巴开发的mvc框架(就是spring mvc又封了一层) 2.此项目是个完整的项目,修改数据库配置后可直接运行(搜索data-source.xml) 3.webx自带的持久层是ibatis,我改成了hibernate 3.此为maven项目,jar包在项目...

    webx-springExt整合eclipse插件

    webx-springExt整合eclipse插件,挺好用的

    webx3 PDF(阿里巴巴 前端web框架)

    webx3 PDF(阿里巴巴 前端web框架)

Global site tag (gtag.js) - Google Analytics