论坛首页 Java企业应用论坛

17486行的java 类文件

浏览 15330 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-08-30  
我见过更长了,维护起来让人恶心。
0 请登录后投票
   发表时间:2011-08-30  
我有洁癖,一般代码都不超过300行
0 请登录后投票
   发表时间:2011-08-30  
george_space 写道
说的委婉点:这个类写得不怎么样;
说得难听点:这个类就是一坨屎。

类中n多类似这样的硬编码:
getStrByID("4008bill", "UPP4008bill-000064")

.getStrByID("4008bill",
                      "UPP4008bill-000340"

gvo.getHeaderValue("vbillcode")

.getItemValue(0, "idesatype");


getStrByID("4008bill",
        "UPP4008bill-000013")


n多if-elseif
n多变量掺和在方法之间,类变量并没有集中定义,

类中宁可使用
/**
   * 创建者:王乃军 功能:签字 参数: 返回: 例外: 日期:(2001-5-9 9:23:32)
   *
   * 修改日期,修改人,修改原因,注释标志: 修改人:刘家清 修改日期:2007-11-14下午03:51:17 修改原因:签字时间由后台处理。
   */
这样的自己格式的注释,也不使用标准的javadoc注释,更不用谈什么设计模式了。


下面是我写得一个类,虽然算不上什么牛类,但是可以跟楼主的万行大类对比一下,看看什么是标准的Javadoc注释,什么是条理性:
/*
 * Programming by: George [it is a secret@gmail.com]
 * Copyright (C) George And George Companies to Working For, All Rights Reserved.
 */
package com.[It is a secret].web.[secret].service.cm.helper;

import com.[secret].web.base.contentmodule.beans.CustomFieldViewBean;
import com.[secret].web.base.contentmodule.beans.entities.SysCmFieldsDataTypeApi;
import com.[secret].web.base.contentmodule.beans.entities.SysCmFieldsRegApi;
import com.[secret].web.base.contentmodule.beans.entities.SysCmFieldsViewTypeApi;
import com.[secret].web.base.contentmodule.command.CmfDataTypeBeanListCommand;
import com.[secret].web.base.contentmodule.command.CmfViewTypeBeanListCommand;
import com.[secret].web.[secret].service.bean.Sro;
import com.[secret].web.[secret].service.cm.component.CmfComponentListContext;
import com.[secret].web.[secret].service.cm.component.CmfScriptEngineHelper;
import com.[secret].web.[secret].service.cm.component.CustomFieldListHelper;
import com.[secret].web.[secret].service.cm.component.FieldDataTypeBeanMapHelper;
import com.[secret].web.[secret].service.cm.component.FieldViewTypeBeanMapHelper;
import com.[secret].web.[secret].service.cm.component.GetCustomFieldBeanListCmd;
import java.util.HashMap;
import java.util.List;

/**
 *
 * @author George [it is a secret@gmail.com]
 */
public class CmfComponentsHelper {

    /**
     * 得到内容模型自定义字段的组件列表
     * @param doType 操作类型,Add=添加,Edit=编辑,此字符串参数从{@link DoTypeDef}类获得
     * @param rootUriOfCurrentPage         页面根URI
     * @param getCustomFieldBeanListCmd    得到自定义字段bean list的命令对象
     * @param cmfViewTypeBeanListCommand   得到视图层bean list 的命令对象
     * @param cmfDataTypeBeanListCommand   得到数据类型bean list的命令对象
     * @return  内容模型自定义字段组件列表
     * @since v 1.9 2010-5-1
     */
    public static Sro<CustomFieldViewBean> getCustomFieldComponentList(
            String doType,
            String rootUriOfCurrentPage,
            GetCustomFieldBeanListCmd getCustomFieldBeanListCmd,
            CmfViewTypeBeanListCommand cmfViewTypeBeanListCommand,
            CmfDataTypeBeanListCommand cmfDataTypeBeanListCommand) {

        Sro<CustomFieldViewBean> returnValue = new Sro<CustomFieldViewBean>();
        //创建系列职责链结点
        CustomFieldListHelper customFieldListHelper = new CustomFieldListHelper(getCustomFieldBeanListCmd);
        FieldViewTypeBeanMapHelper fieldViewTypeBeanMapHelper = new FieldViewTypeBeanMapHelper(cmfViewTypeBeanListCommand);
        FieldDataTypeBeanMapHelper fieldDataTypeBeanMapHelper = new FieldDataTypeBeanMapHelper(cmfDataTypeBeanListCommand);
        CmfScriptEngineHelper cmfScriptEngineHelper = new CmfScriptEngineHelper();

        //组装职责链
        customFieldListHelper.setNextChain(fieldViewTypeBeanMapHelper);
        fieldViewTypeBeanMapHelper.setNextChain(fieldDataTypeBeanMapHelper);
        fieldDataTypeBeanMapHelper.setNextChain(cmfScriptEngineHelper);

        //组装职责链上下文对象
        CmfComponentListContext context = new CmfComponentListContext();
        context.setDoType(doType);
        context.setRootUriOfCurrentPage(rootUriOfCurrentPage);

        //执行职责链
        context = customFieldListHelper.process(context);

        //从职责链上下文中得到结果对象
        CustomFieldViewBean customFieldViewBean = context.getCustomFieldViewBean();

        returnValue.addReturnValue(customFieldViewBean).success();

        return returnValue;
    }

    /**
     * 根据自定义字段配置信息和视图展现类型,得到展现的html列表
     * @param customFieldList  自定义字段列表
     * @param fieldsValueMap   字段值map
     * @param viewTypeBeanMap  视图层战线类型bean map
     * @param dataTypeBeanMap  数据类型 bean map
     * @param doType           doType 操作类型,Add=添加,Edit=编辑,此字符串参数从{@link DoTypeDef}类获得
     * @param rootUriOfCurrentPage 页面根URI
     * @return  视图层战线类型bean列表
     */
    public static Sro<CustomFieldViewBean> getCustomFieldComponentList(
            List<? extends SysCmFieldsRegApi> customFieldList,
            HashMap<String, Object> fieldsValueMap,
            HashMap<String, SysCmFieldsViewTypeApi> viewTypeBeanMap,
            HashMap<String, SysCmFieldsDataTypeApi> dataTypeBeanMap,
            String doType,
            String rootUriOfCurrentPage) {

        Sro<CustomFieldViewBean> returnValue = new Sro<CustomFieldViewBean>();

        //创建系列职责链结点
        CustomFieldListHelper customFieldListHelper = new CustomFieldListHelper(customFieldList);
        FieldViewTypeBeanMapHelper fieldViewTypeBeanMapHelper = new FieldViewTypeBeanMapHelper(viewTypeBeanMap);
        FieldDataTypeBeanMapHelper fieldDataTypeBeanMapHelper = new FieldDataTypeBeanMapHelper(dataTypeBeanMap);
        CmfScriptEngineHelper cmfScriptEngineHelper = new CmfScriptEngineHelper();

        //组装职责链
        customFieldListHelper.setNextChain(fieldViewTypeBeanMapHelper);
        fieldViewTypeBeanMapHelper.setNextChain(fieldDataTypeBeanMapHelper);
        fieldDataTypeBeanMapHelper.setNextChain(cmfScriptEngineHelper);

        //组装职责链上下文对象
        CmfComponentListContext context = new CmfComponentListContext();
        context.setDoType(doType);
        context.setRootUriOfCurrentPage(rootUriOfCurrentPage);

        //执行职责链
        context = customFieldListHelper.process(context);

        //从职责链上下文中得到结果对象
        CustomFieldViewBean customFieldViewBean = context.getCustomFieldViewBean();

        returnValue.addReturnValue(customFieldViewBean).success();

        return returnValue;
    }

    //......
    //省略若干方法
    //......
}



/*
 * Programming by: George [it is a secret@gmail.com]
 * Copyright (C) George And George Companies to Working For, All Rights Reserved.
 */
package com.[secret].web.[secret].service.cm.component;

/**
 *
 * @author George [it is a secret@gmail.com]
 */
public class CmfScriptEngineHelper extends AbstractCmfComponentListHelperChain {

    public CmfScriptEngineHelper() {
    }

    /**
     * 内容模型自定义字段职责链中的一个节点:负责自定义字段页面渲染的模板解析引擎
     * @param context 内容模型自定义字段展现处理的上下文对象
     * @return  内容模型自定义字段展现处理的上下文对象
     */
    @Override
    public CmfComponentListContext process(CmfComponentListContext context) {
        //创建模板解析器创建者实现对象
        CmfScriptResolverBuilderImpl scriptResolverBuilder = new CmfScriptResolverBuilderImpl();
        //创建解析器创建者导演
        CmfScriptResolverDirector scriptResolver = new CmfScriptResolverDirector(scriptResolverBuilder);
        //执行模板脚本解析
        context = scriptResolver.doResolving(context).getContext();
        //设置上下文状态
        context.getExecution().success();

        return context;
    }
}


类不在长,有条理则灵;
智商不在高,够细心则灵;
代码不怕多,有标准注释则灵。

注释不错,  +1
0 请登录后投票
   发表时间:2011-08-30  
你想说明什么
0 请登录后投票
   发表时间:2011-08-30  
wison_wu 写道
我这边一个类两万多行,service,dao,action全在一个类里面。我找谁说理去

好奇!
0 请登录后投票
   发表时间:2011-08-30  
这个没什么,最近在维护,一个方法8000多行 基本上没注视 看的一个纠结。
0 请登录后投票
   发表时间:2011-08-30  
十多年了
才1W多行。。。 不多吧。。。。

查了一下,2001年5月 jdk1.3.1刚刚发布。。。。。

那时我才高二。。。

0 请登录后投票
   发表时间:2011-08-30  
类长 不算什么,但是寿命长, 还是值得围观一下
0 请登录后投票
   发表时间:2011-08-31  
这个模块的类哥以前维护过,30000多行的也有
不过话说回来,这么复杂的业务逻辑重构一次起码要1-2年以上
0 请登录后投票
   发表时间:2011-08-31  
VERY BAD and Fire your developer!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics