C#小型系统快速开发框架闲聊

    因工作环境原因。有接触到各个框架。在工作中也用过不同的方式去开发。ADO/EF/XSQL/XML配置完成数操作...

    她说,每行业都是学无止境的。是啊!在毕业后的一年多里,接触的东西挺多的。不过现在的工作环境却让本身对技术不是很热忱的自己对这行业不是很上心了。

    为了给之前的努力做点有意思的事情。在此分享下自己所整合的框架。用起来感觉很可以。不过性能上的提升还是有很多的空间。

    废话不多说了。介绍下个人比较喜欢的开发方式吧。

    框架!最简要的归类只要做到3点就够了:

          1.性能高(执行效率要尽可能的快)

          2.便于开发(用尽量少的代码去实现操作、做好常用方法的分类)

          3.易于入手、便于维护(预留接口,可扩展)

    通过接触到的框架来说,个人感觉用得最顺的还是直接写sql是用的比较顺的,也便于sql的优化,数据量大的时候可以直接把语句提取出来调试和优化就好。不像EF这种不能直接看到sql的。数据量太大的时候不能直接对sql优化。是个很大的弊端。

     说到这里,可能有人会说EF的面向对象很好用。免去了拼写sql的麻烦和各种赋值的烦恼。

     其实,开发只是一种思想而已。sql可以用工具直接生成。赋值。只要用反射便可实现。在论坛上也有很多关于反射的方法和发射优化的例子。

说了这么多,展示一下最近所整理的一个土鳖快速开发框架了。

    1、数据操作的各种接口的定义ExecuteReader、ExecuteScalar、ExecuteNonQuery等

    2、所需的数据操作的方法的生成。我是用鱼叔写的ClownFish去生成的。

    3、对象赋值。用发射就可以实现。

        最近找了一个反射的方法,如下,性能还未测。

private static void FormReader(IDataReader reader, object targetObj)
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                System.Reflection.PropertyInfo propertyInfo = targetObj.GetType().GetProperty(reader.GetName(i));
                if (propertyInfo != null)
                {
                    if (reader.GetValue(i) != DBNull.Value)
                    {
                        if (propertyInfo.PropertyType.IsEnum)
                        {
                            propertyInfo.SetValue(targetObj, Enum.ToObject(propertyInfo.PropertyType, reader.GetValue(i)), null);
                        }
                        else
                        {
                            propertyInfo.SetValue(targetObj, reader.GetValue(i), null);
                        }
                    }
                }
            }
        }


下面展示下数据操作所要写的代码:

        /// <summary>
        /// 新增类别信息
        /// </summary>
        /// <param name="category">类别实体</param>
        /// <returns>成功1.失败0</returns>
        public int InsertCategory(CategoryMo category)
        {
            var parameters = new
            {
                CategoryName = category.CategoryName,
                Type = category.Type,
                CreateTime = DateTime.Now
            };

            var result = DatabaseExtensions.ExecuteXMLQuery(
               x => x.XMLName("Catelog").MethodName("InsertCategory"),
               parameters);
            return result;
        }

        /// <summary>
        /// 更新类别信息
        /// </summary>
        /// <param name="category">类别信息</param>
        /// <returns>成功1.失败0</returns>
        public int UpdateGetCategory(CategoryMo category)
        {
            var parameters = new
            {
                CategoryName = category.CategoryName,
                Type = category.Type,
                CreateTime = category.CreateTime,
                CreateID = category.CreateID,
                UpdateTime = category.UpdateTime,
                UpdateID = category.UpdateID,
                IP = category.IP,
                CategoryID = category.CategoryID
            };
            var result = DatabaseExtensions.ExecuteXMLQuery(
               x => x.XMLName("Catelog").MethodName("UpdateCategory"),
               parameters);
            return result;
        }


        /// <summary>
        /// 删除记录
        /// </summary>
        /// <param name="id">编号</param>
        /// <returns>成功1.失败0</returns>
        public int DeleteCategory(int id)
        {
            var result = DatabaseExtensions.ExecuteXMLQuery(
                              x => x.XMLName("Catelog").MethodName("DeleteCategory"),
                              new { CategoryID  = id});
            return result;
        }


        /// <summary>
        /// 根据编号获取类别信息
        /// </summary>
        /// <param name="categoryid">类别编号</param>
        /// <returns>类别信息</returns>
        public CategoryMo GetCategoryInfo(int categoryid)
        {
            var category = DatabaseExtensions.FetchRowXML<CategoryMo>(
               x => x.XMLName("Catelog").MethodName("SelectCategoryInfo"),
               new { CategoryID = categoryid });  //,reader => FromReaderMenus(reader)
            return category;
        }

 /// <summary>
        /// 获取类型列表信息
        /// </summary>
        /// <param name="pageIndex">页数</param>
        /// <param name="pageSize">显示条数</param>
        /// <param name="totalNum">总数</param>
        /// <returns>类型列表信息</returns>
        public List<CategoryMo> GetCategoryList(int pageIndex, int pageSize, out int totalNum)
        {
            var category = DatabaseExtensions.FetchXML<CategoryMo>(
               x => x.XMLName("Catelog").MethodName("SelectCategory").OrderByDesc("CategoryID").PageIndex(pageIndex).PageSize(pageSize),
               null,
               reader => FromReaderMenus(reader), out totalNum);
            return category;
        }

 

简单的代码就可以实现对数据源的基本操作。喜欢直接写sql的朋友可以互相学习下。

  框架灵感来源鱼叔(Fish Li)

posted @ 2013-11-13 21:06  TimeFrames  阅读(830)  评论(1)    收藏  举报