zoukankan      html  css  js  c++  java
  • 一个礼拜开发出一个栏目(总结/反思)

    架构:JEECMS+三大框架

    开发人员:1人

    1. 数据库设计

    涉及到的数据库:nubb_movie(电影)/nubb_movie_type(电影类型)/nubb_movie_year(电影年份)/nubb_movie_area(电影地区)/nubb_movie_tag(电影标签)/nubb_actor(明星)

    我不知道该怎么评价自己这一个礼拜的开发效率,尽管在投入编码之前,一再告诉自己,设计好一个数据库非常重要,但是事情做得不尽人意。

    对电影栏目这一块的东西,在网上很常见,自己平时看网页的时候也去想怎样去设计这方面的数据库表、怎样去建立表与表之间的关联,这样就按照我自己脑子里想的方式去执行,但是到了整理/编写前台数据时,自己却发现有很多信息没有涉及到,导致回过头来重新加表,加字段!  原因在于自己没和编辑部沟通好,在对方的详细页面出来之后,应该要第一时间去分析功能需求,提出疑问。 

    数据库设计总结: 在把握整个功能需要之后,宁可多花时间来设计数据库,也不能跟着自己的感觉走,否则可能导致设计得不够全面,让开发工作断断续续。

    2. 开发阶段

    中间出现的问题:

     # 映射文件 第一行声明class,其中有个catelog="test" 起初是用的MyEclipse自动生成的实体类和映射文件,多出这么个属性,我就没怎么管。但是到后台操作时,发现插入数据后列表有显示,但在数据表中没有任何记录! 重启服务器也没有用!  通过这一属性值test直面意思就是测试用的,也就是将存储的数据存入本地临时文件中,而并没有存入数据表中。

     # struts 对实体bean的操作,至于简单的set/get赋值,取值的操作我就不细说了,为了减少对数据库的请求次数,我们在对有关联关系的实体类,通常的做法是:

    public String add()
        {
            try {
                if(year_id > 0 && area_id > 0){
                    try {
                        bean.setYear(myMng.findById(year_id));
                        bean.setMovieArea(areMng.findById(area_id));
                        this.setNubbMovieSet();
                        mMng.save(bean);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else{
                    addActionError("添加失败!年度信息、地区未选择!");
                    return SHOW_ERROR;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return this.list();
        }

    在one-to-many的关联中,many的那一方这样做大可不必,直接利用传主键ID的构造,new 出一个新的对象,如:

    bean.setYear(new Year(year_id));
    bean.setMovieArea(new Area(area_id));
    this.setNubbMovieSet();
    mMng.save(bean);

    这样会不会很好用呢! :)   同理,我们都知道many-to-many从查询到插入、更新的效率都很慢,我们可以添加第三方表转换为one-to-many的关联关系,也能用到上述方法!

     # 多项选择select组件

    最近遇到一个新的需求,需要在明星添加页面中,关联多个电影,这样让想到了struts2中有个select多选组件。于是派上用场了:

    <tr>
                            <td width="20%" class="pn-flabel pn-flabel-h">
                                电影电视剧:
                            </td>
                            <td width="80%" class="pn-fcontent">
                                <table border="0">
                                    <tr>
                                        <td>
                                            <label for="leftTitle">全部明星</label><br/>
                                            搜索:<input type="text" id="search" size="15"/><input type="button" value="搜索" id="searchActors"/><br/>
                                            <select size="15" id="leftSideCartoonCharacters" multiple="multiple">
                                                <option value="-1">--- 全部影片 ---</option>
                                                <#list mlist as t>
                                                    <option value="${t.id!}" class="search">${t.zhName!}</option>
                                                </#list>
                                            </select>
                                            <input type="button" 
                                                onclick="moveOptionDown(document.getElementById('leftSideCartoonCharacters'), 'key', 'headerKey');"
                                                value="v"
                                            />
                                            <input type="button"
                                                onclick="moveOptionUp(document.getElementById('leftSideCartoonCharacters'), 'key', 'headerKey');"
                                                value="^"
                                            />
                                        </td>
                                        <td valign="middle" align="center">
                                            <input type="button" value="<-" onclick="moveSelectedOptions(document.getElementById('rightSideCartoonCharacters'), document.getElementById('leftSideCartoonCharacters'), false, 'doubleHeaderKey', '');" /><br /><br />
                                            <input type="button" value="->" onclick="moveSelectedOptions(document.getElementById('leftSideCartoonCharacters'), document.getElementById('rightSideCartoonCharacters'), false, 'headerKey', '');" /><br /><br />
                                            <input type="button" value="<<--" onclick="moveAllOptions(document.getElementById('rightSideCartoonCharacters'), document.getElementById('leftSideCartoonCharacters'), false, 'doubleHeaderKey', '');" /><br /><br />
                                            <input type="button" value="-->>" onclick="moveAllOptions(document.getElementById('leftSideCartoonCharacters'), document.getElementById('rightSideCartoonCharacters'), false, 'headerKey', '');" /><br /><br />    
                                            <input type="button" value="<*>" onclick="selectAllOptionsExceptSome(document.getElementById('leftSideCartoonCharacters'), 'key', 'headerKey');selectAllOptionsExceptSome(document.getElementById('rightSideCartoonCharacters'), 'key', 'doubleHeaderKey');" /><br /><br />
                                        </td>
                                        <td>
                                            <label for="rightTitle">已选影片</label><br />
                                            <select name="movie_ids" size="15" multiple="multiple" id="rightSideCartoonCharacters">
                                                <option value="-1">--- 已选影片 ---</option>
                                            </select>
                                            <input type="button" 
                                                onclick="moveOptionDown(document.getElementById('rightSideCartoonCharacters'), 'key', 'doubleHeaderKey');"
                                                value="v"
                                            />
                                            <input type="button" 
                                                onclick="moveOptionUp(document.getElementById('rightSideCartoonCharacters'), 'key', 'doubleHeaderKey');"
                                                value="^"
                                            />
                                        </td>
                                    </tr>
                                    </table>
                            </td>
                        </tr>

    在提交表单时,将选取项以一个数组的形式给Action操作,如下代码:

    function checkForm(){
        var selectedComs = document.getElementById("rightSideCartoonCharacters");  
        for(var i=0;i<selectedComs.length;i++){  
            selectedComs.options[i].selected = true;  
        }
        $("#jvForm").submit;
    }
    $("#searchActors").bind("click",function(){
        var $sou = $("#search").val();
        if($sou == ""){
            alert("搜索内容不能为空!");
            return ;
        }
        $.post("/admin/auxiliary/movieactor/Com_search.htm", 
                { val: $sou },
                   function(data){
                       $(".search").remove();
                    $("#leftSideCartoonCharacters").append(data);    
                    },"html");    
    });
    </script>
    <script type="text/javascript" src="/script/optiontransferselect.js"></script>
        </body>

    页面如下:

     

    3. 反思

     # 代码重构

    简单来说将共用、重用性较高的代码抽取出来。 当然我们也不能觉得重构这东西很方便,一味的借助它。 我觉得:

    1. 在找到目前最好的解决方案之后,适当使用重构

    2. 可使用常用的设计模式处理业务逻辑,完了以后你再回头看看,有些方法大可不必使用重构的!

    3. 利用继承体系来处理,有效的替代重构,比如:咱们对后台数据的增删改查,这就设置一个基类 存在公用的方法,让各个Action子类调用,如果有什么特殊的操作,也能扩展。

     # 前台添加、编辑页面合并公用。

     # 善于利用现有插件提升网页友好度

  • 相关阅读:
    有耗介质中波的传播
    介质分界处的反射
    TFSF边界条件
    吸收边界条件
    .apk的MIME类型
    Java instanceof
    Java toString()方法的自动调用
    整理一系列优秀的Android开发源码
    GOOGLE CODE ANDROID 开源项目 集合
    imsdroid 学习(初认识)
  • 原文地址:https://www.cnblogs.com/xmaomao/p/3199290.html
Copyright © 2011-2022 走看看