读书人

分析下这个类,这样写有无意义或改进的

发布时间: 2012-01-03 22:16:06 作者: rapoo

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

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是用来存取数据的,而不是用来获取运行时类型用的.非要这样用,我只能说你是把大卡车当成私家车在用.

读书人网 >.NET

热点推荐