日期:2014-05-20  浏览次数:20835 次

分析下这个类,这样写有无意义或改进的地方?
C# code

/// <summary>
    /// 
    /// </summary>
    public class zt_classfilyBll : BaseClass
    {
        /// <summary>
        /// 
        /// </summary>
        public zt_classfilyBll() { }

        /// <summary>
        /// 从缓存中获取类的对象
        /// </summary>
        /// <param name="modelName">对象缓存Key</param>
        /// <returns></returns>
        public static zt_classfilyBll GetRuntimeClass(string modelName)
        {
            //这里从缓存中获取类的实例
            zt_classfilyBll bllclass = (zt_classfilyBll)CahceOperate.GetFromCache(modelName);
            if (bllclass == null)
            {
                bllclass = new zt_classfilyBll();
                CahceOperate.SaveToCache(modelName, bllclass);
            }
            return bllclass;
        }

        //....//类重载父类的方法.
    }



调用:
C# code

zt_classfilyBll classBll = zt_classfilyBll.GetRuntimeClass("zt_classfilyBll");
classBll.父类的方法(xx);



感觉这样GetRuntimeClass这个方法写的位置不对,放在子类中四不像.

------解决方案--------------------
看不出来 什么问题 帮忙顶下!
------解决方案--------------------
封装到CahceOperate.GetFromCache里面?

------解决方案--------------------
GetRuntimeClass 该函数放到其它类中为妥
------解决方案--------------------
静态方法直接调用
zt_classfilyBll.GetRuntimeClass("")

------解决方案--------------------
不创建实例直接调用
------解决方案--------------------
楼主是想实现工厂模式吗?不过你存在缓存里面是不是有点不合适。你的类如果是无状态的,直接定义静态方法就可以了。如果是有状态的,所有的调用都得到同一个对象就不满足你的需求了。
或者是一个持久化对象,例如connection,那就应该使用池了,而不是简单的用一个缓存。
------解决方案--------------------
除了有些命名好像有点不规范以外,其他地方还好。
------解决方案--------------------
public zt_classfilyBll() { }

public static zt_classfilyBll GetRuntimeClass(string modelName)

如果是我的话,我要把 public zt_classfilyBll() { } 这个构造函数,变为 私有 的。
否则 外部用户 只 new 不 GetRuntimeClass 的话……

------解决方案--------------------
探讨
回:snakegod.
工厂模式模式到没有.只是调用类的方法时不必每次都去重新创建类的实例,从缓存中查找存在的实例.
比如zt_classfilyBll在某一个类new了,在页面应用的时候就不在重新new一个新的对象,直接重缓存中获取它.

------解决方案--------------------
单个实例的管理还不如直接用static变量.
Cache是用来存取数据的,而不是用来获取运行时类型用的.非要这样用,我只能说你是把大卡车当成私家车在用.