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

来源:互联网 发布:淘宝怎么没有朋友代付 编辑:程序博客网 时间:2024/06/06 01:48

目前的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());   //定义的错误信息                  }



原创粉丝点击