YZR框架

    概要:自从上次写了一篇关于YZR.Data和YZR.Data webconfig配置的相关介绍之后,就没有再提及到相关的点了,这里会补上这些天框架的补充优化以及各部分再单独提一下,也简单写一下使用场合.

 

   
   YZR.Data类库是对数据的操作,其中对Sqlserver数据库的支持是通过RMotion,对Oracle是通过RAction,RDataBase是作为数据库判断的共同父类,IDataBase则是作为数据库操作类对象的规范和标准,通常就是一个接口.RPro提供对存储过程的支持,RDic,RWhere,KeyValuePair,DbAction,DbHelper,DbParam等作为自定义的操作辅助类.
   谈一下扩展性,比如面向MySQL的开发,在YZR.Data中可以通过一个相似于RAction或者RMotion的处理类,这样YZR.Data即可以支持MySQL,在UI层只需要在AppStart中预加载和在webconfig配置连接字符串即可.
   谈一下功能,目前支持:CURD,事务,自定义Sql,存储过程.
   谈一下性能,底层基本通过反射技术实现,Model使用枚举,减少了对"对象"的操作.
   Note:能写出YZR.Data不是一两天的事情,也是多年对大牛作品的仔细解读和自己花功夫思考,本人看过不少好的框架,这里只是作为个人研究,代码都是原创,但思路可能同出一辙.
   这样,在我的项目上,不管要求是什么数据库,都能很快有一套成熟的框架来进行开发.

 

    

   YZR.Entity类库使用的是枚举的形式,在进行框架编写的时候,没有面向对象那样操作起来简单,但是性能是强于实体的,而且也更容易操作和理解,因为枚举比对象简单得多.

   Custom文件夹:考虑到开发往往需要自定义,这里提供一个入口进行自定义实体的定义.

   TableNames:面向单数据库的开发,那么TableNames枚举就可以搞定了,但考虑到大项目复杂的数据库设计,这边就需要手动增加相应的枚举类文件.

  

   
   经常使用多层框架的开发,那么对Core层应该很熟悉,YZR.Core核心层,交互的一边是YZR.Data,另一边是YZR.Logic.Core是框架对数据流程的统一操作,YZR.Data数据操作实例的获取以及管理,编写处理类,页面类的父类的地方.
  AjaxBase:一般处理程序的父类,框架的统一操作,系统的登录验证,集成权限以及Response输出等.
  DbManager,DBUtilityManager:对YZR.Data操作数据库对象实例的管理,注册等
  Enum:action操作的枚举
  FileExtend:文件以及文件夹的IO流操作类
  LogicBase是面向Logic层的父类,PageBase是UI层页面的父类,IBase则是统一的规范标准.
  SqlCode则是对自定义sql的支持.
 
   
    业务逻辑层,项目都有一定的业务,这里规定一个业务新建相应的业务处理类即可,SysLogic是系统业务逻辑,LuckdrawLogic是抽奖逻辑.Aop是切面编程操作类.
    然而,往往单一逻辑的CURD,我们可以不写一句代码,直接由框架的统一处理类即可完成,这里在SysLogic或者LuckdrawLogic逻辑类中编写的应该是重写相关的复杂逻辑的CURD方法.
   
   UI层是传统的webform
   App_Data:开发者可以将Sql语句或者Sql文件放在这里.
   AppStart:根据webconfig得到相应的YZR.Data数据操作实例
  
namespace YZR.UI.AppStart
{
    using YZR.Config;
    public static class AppStart
    {


        /// <summary>
        /// 应用程序入口  By YZR
        /// </summary>
        public static void Init()
        {
            string Title = WebSettingManager.WebSetting.BaseSetting.title + " - " + WebSettingManager.WebSetting.BaseSetting.subTitle;
            int count = WebSettingManager.WebSetting.StrConnSetting.Count;
            Dictionary<string, string> dic = new Dictionary<string, string>();
            for (int i = 0; i < count; i++)
            {
                connSection section = WebSettingManager.WebSetting.StrConnSetting[i];
                dic.Add(section.Rname, section.Rvalue);
            }
            //string strConn = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["default"].ConnectionString;
            //string connString = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ToString();
            string ProviderName = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ProviderName;
            string path = AppDomain.CurrentDomain.BaseDirectory;
            Assembly ass = Assembly.LoadFrom(path + "bin\\YZR.Data.dll");
            //Assembly ass = Assembly.Load("YZR.Entity");
            //TODO:Oracle数据库使用RAtion,Sqlserver使用RMotion
            Type type = null;
            string value = dic["Oracle"];
            if (value.Equals(ProviderName, StringComparison.OrdinalIgnoreCase))
            {
                type = ass.GetType("YZR.Data." + "RAction");
            }
            else
            {
                value = dic["Sqlserver"];
                if (value.Equals(ProviderName, StringComparison.OrdinalIgnoreCase))
                {
                    type = ass.GetType("YZR.Data." + "RMotion");
                }
                else
                    throw new Exception("配置节点出错");

            }


            //ConstructorInfo c = type.GetConstructor(new Type[] { typeof(string) });//构造函数的实参类型
            //c.Invoke(new object[] { "SYS_ADMIN" });//实参

            //TODO:在这里需要将所有Entity注册进DbUtilityManager中
            if (type != null)
            {
                Type tableType = typeof(TableNames);
                string[] tableNames = tableType.GetEnumNames();
                for (int i = 0; i < tableNames.Length; i++)
                {
                    object fobj = Activator.CreateInstance(type, new object[] { tableNames[i] });
                    DbUtilityManager.RegistDbUtility(tableNames[i], fobj);
                }
            }
        }
    }
}
View Code

   R_System:存放开发的处理程序和页面

    webconfig:详细请看YZR.Data webconfig文章.

   

   日志操作类:

   RSystemError:简单的文本文件的方式记录.(单文件的写入)

   LogHelper:使用Log4Net日志组件.相关请查看我的博客:Log4Net日志组件

 

  

  缓存处理类:

   Cache:存放缓存处理类

   Enum:枚举缓存Type

   ICache:Cache的接口父类

   RCache是作为统一的处理类.

  

namespace YZR.RCache
{
    public class RCache
    {
        private static ICache Icache;   // cache对象

        private static RCache instance = null;  //缓存实例

        public static RCache GetInstance(CacheType type)
        {

            switch (type)
            {
                case CacheType.MemCache:
                    //Icache = new MemCachedStrategy();
                    break;

                case CacheType.MemCacheAndWebCache:
                    //Icache = new MemCachedAndWebStrategy();
                    break;

                case CacheType.WebCache:
                    Icache = new WebCache();
                    break;

                case CacheType.XMLCache:
                    //Icache = new XMLCacheStrategy();
                    break;

                case CacheType.RedisCache:
                    //Icache = new RedisCacheStrategy();
                    break;




            }

            if (instance != null) return instance;

            RCache temp = new RCache();
            System.Threading.Interlocked.CompareExchange(ref instance, temp, null);
            return instance;
        }

        //构造方法让它私有化,这样外界就不能通过 new 来实例化了  
        private RCache() { }

        /// <summary>
        /// 添加缓存
        /// </summary>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        public virtual void AddItem(string key, object obj)
        {
            Icache.Add(key, obj);
        }

        /// <summary>
        /// 新增或者更新缓存    推荐使用 
        /// </summary>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        public virtual void SetItem(string key, object obj)
        {
            Icache.Set(key, obj);
        }

        /// <summary>
        /// 添加缓存依赖文件
        /// </summary>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        public virtual void AddItemWithFileChange(string key, object obj, string[] files)
        {
            Icache.AddItemWithFileChange(key, obj, files);
        }

        /// <summary>
        /// 移除单个缓存
        /// </summary>
        /// <param name="key"></param>
        public virtual void RemoveItem(string key)
        {
            Icache.Remove(key);
        }

        /// <summary>
        /// 移除所有缓存
        /// </summary>
        public virtual void RemoveALLItem()
        {

            Icache.RemoveALL();

        }
        /// <summary>
        /// 获取缓存对象
        /// </summary>
        /// <param name="xpath"></param>
        /// <returns></returns>
        public virtual object GetItem(string key)
        {
            return Icache.GetItem(key);
        }
    }
}
View Code

   

    缓存代理类:

    YZR.Comm,YZR.Utility是常用类,帮助类,比如WebHelper.cs,ScriptHelper.cs,EncrpytHelper.cs等

    YZR.Config是webconfig节点的配置类库.

 

    就介绍到这里了!

转载于:https://www.cnblogs.com/Francis-YZR/p/4995914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值