当前位置: 代码迷 >> .NET分析设计 >> 分析下这个类,这样写有无意义或改进的地方?解决办法
  详细解决方案

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

热度:7221   发布时间:2013-02-25 00:00:00.0
分析下这个类,这样写有无意义或改进的地方?
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是用来存取数据的,而不是用来获取运行时类型用的.非要这样用,我只能说你是把大卡车当成私家车在用.
  相关解决方案