当前位置: 代码迷 >> .NET分析设计 >> 如果小弟我用反射机制和泛型写一整个网站的话
  详细解决方案

如果小弟我用反射机制和泛型写一整个网站的话

热度:241   发布时间:2016-05-01 22:32:21.0
如果我用反射机制和泛型写一整个网站的话
今天突发奇想,如果说我们与数据库交互的代码有这么多相同的话,那为什么我不去封装一个公共方法来使用。后来研究了半天,发现只有泛型+反射机制去实现,可是朋友们说这样会导致整个网站运行缓慢甚至奔溃,请问,是这样吗?能帮我说明一下原因吗?
 /// <summary>
        /// update
        /// </summary>
        /// <param name="Model">修改实体</param>
        /// <param name="where">条件</param>
        /// <returns>成功为1失败为0</returns>
        public static StringBuilder ReturnUpdateIsOK(T Model, string where)
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                if (ProtectIsShow(where, out sb))
                {
                    sb.AppendLine("内含危险字符!");
                    return sb;
                }
                else
                {
                    List<StringBuilder> sbuList = ValueFieldsAndParam(Model, "Update");
                    SqlParameter[] para = GetParas(Model);
                    StringBuilder strSql = new StringBuilder();
                    StringBuilder sbu = new StringBuilder();
                    strSql.Append("update " + sbuList[3] + " set ");
                    strSql.Append(sbuList[0]);
                    if (!string.IsNullOrEmpty(where))
                    {
                        strSql.Append(" where " + where);
                    }
                    else
                    {
                        strSql.Append(sbuList[4]);
                    }
                    int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), para);
                    if (rows > 0)
                    {
                        sbu.Append("1");
                    }
                    else
                    {
                        sbu.Append("0");
                    }
                    return sbu;
                }
            }
            catch (Exception ex)
            {
                return Common.ReturnException(ex);
            }
        }

------解决思路----------------------
其实你的想法很好~
接下来的问题~ 既然你能想到泛型+反射
那么你应该有能力想到怎么去测试这代码的效率

搜索一下: Repository模式 
再学习一下ORM框架  EntityFramework
------解决思路----------------------
嗯,我上面不是针对 lz 的问题,而是针对某些过激的框架而言的。使用那些框架,只能让学生有几个月的新鲜感(因为学生的心目中没有质量概念),而项目经理则会因为调试问题而头疼。

你可以写一个反射代码,尽量控制在100行代码以内,我当然赞成你这样写

但是你不要说你就是要替换掉人家整站的数据库操作代码。你在问题中的这种态度,是要不得的。你应该让同事们抽出百分之一的数据库操作代码,来试用你的代码。如果你自己也是这样想的,那么才能保证逐渐成熟地开发一个框架,而不会总想着“推倒重来”。
------解决思路----------------------
orm框架你可以使用ef
不用框架 基于ado.net有很多封装好的dbhelper或sqlhelper 其中也有复杂点的用到反射 你可以下载下来研究研究
------解决思路----------------------
其实用不着反射,你可以先做一个baseModel,其它所有的model从这baseModel进行扩展。
baseModel做成类似于Dictionary<K,V>,就OK了。
------解决思路----------------------
运行缓慢?别开玩笑了。。

这里不用反射的话真是太浪费了。。

这里通过反射获取到值,设置SqlParameter[] 和生成sql语句。。性能差都是毫秒级的,完全可以忽略。。

如果上百个类,是不是要写上百个这样的东西?这些地方不用反射很浪费。。这里完全可以牺牲那么毫秒级的性能来换取代码的可维护性。。

这样的代码没什么不好,我觉得是非常不错的
  相关解决方案