解剖实体框架(4)--实体的管理

实体的管理主要包括如下功能:

  A) 实现实体的缓存;

  B) 实现实体的新增,修改,删除,查询等功能;

  C)刷新缓存与数据库同步

  D)  将缓存语句与数据库同步

上面是一些基本的功能,下面是一个基本示例:

//实体状态,对于实体采用缓存方式时有用。

public enum EntityState
    {
        NoChanging,
        Added,
        Modified,
        Deleted
    }

   //这个类是真正实体的容器,目的是为了附加一些信息,便于实体的管理。
    public class EntityItem<T>
    {
        public T StorageItem{get;set;}
        public T CurrentItem{get;set;}
        public T OrigialItem{get;set;}
        public EntityState State{get;set;}
        public EntityItem()
        {
        }
    }

   //利用委托,将选择等工作交给用户自己决定。
    public delegate bool Selector<T>(T M);

    //实体管理类,需要提供数据库连接管理,实体加载,查询,新增,删除,修改,与数据库同步等功能

    //另外也需要提供事务支持功能,支持事务时需要提供能传入连接和事务实例的构造功能。

    //或者本身实现事务,自我回滚,并抛出异常,这样可以实现多个管理类之间的任意组合式事务处理。
    public class EntityMgmt<T>
    {

      

       //实体集合
        private List<EntityItem<T>> _entities;
        private string _connString;
        public EntityMgmt():this("")
        {
           
        }
        public EntityMgmt(string Conn)
        {
            _entities = new List<EntityItem<T>>();
            _connString = Conn;
            if (_connString == "")
            {
                //LoadFromConfigurationFile
            }
        }
        private void LoadEntities()
        {
            //构造查询SQL,加载实体,可参见与数据库交互部分.
        }

        //提供查询功能
        public IEnumerable<T> GetEntities(Selector<T> Selector)
        {
            List<T> theRets = new List<T>();
            if (_entities.Count <= 0)
            {
                LoadEntities();
            }
            for (int i = 0; i < _entities.Count; i++)
            {
                if (_entities[i].State!= EntityState.Deleted && Selector(_entities[i].CurrentItem) == true)
                {
                    theRets.Add(_entities[i].CurrentItem);
                }
            }
            return theRets.AsEnumerable();
        }
        //新增一个实体
        public void Add(T Item)
        {
            EntityItem<T> theItem = new EntityItem<T>();
            theItem.CurrentItem = Item;
            theItem.OrigialItem = Item;
            theItem.State = EntityState.Added;
            _entities.Add(theItem);
        }

       //修改
        public void Update(T Item, Selector<T> SelectOldItem)
        {
            EntityItem<T> theEntityItem = null;
            for (int i = 0; i < _entities.Count; i++)
            {
                if (SelectOldItem(_entities[i].CurrentItem) == true)
                {
                    theEntityItem = _entities[i];
                    break;
                }
            }
            if (theEntityItem != null)
            {
                theEntityItem.CurrentItem = Item;
                theEntityItem.State = EntityState.Modified;
            }
        }
        //接受改变,并将变化同步到数据库.
        public void AcceptChanges()
        {
            foreach (var item in _entities)
            {
                switch (item.State)
                {
                    case EntityState.Added:
                        DbOperation.InsertModel<T>(item.CurrentItem);
                        break;
                    case EntityState.Deleted:
                        break;
                    case EntityState.Modified:
                        //这里可以利用item.StorageItem做并发检测
                        break;
                }
            }
        }
    }
   public enum CacheType
    {
        AppLevel,
        SessionLevel,
        None
    }
    //用工厂模式实现对实体管理类的创建,这样的好处是可以在这里实现对实体管理类本身的管理:
    //全局单例模式,Session级共享等.
    //这个类也可以实现对某个实体管理工厂的单例模式
    public static class EntityMgmtFactory
    {
        private static readonly Dictionary<Type, CacheType> _CacheTypes = new Dictionary<Type, CacheType>();
        static EntityMgmtFactory()
        {
            //可以根据文件配置加载缓存方式.
        }
        public EntityMgmt<T> CreateEntityMgmt<T>(string conn)
        {
            //根据缓存类型来创建或获取实体管理类的实例。
            //这里不再赘述。缓存级别可以利用Runtime的Session.
            return new EntityMgmt<T>(conn);
        }
    }

================================

上面的示例只是一些基本的功能,在实际应用中需要考虑的会更为复杂,比如可以设置失效期,自动同步等。另外也需要提供直接执行SQL的功能等。

AEF的方式比较复杂,但基本原理差不多,它的ESQL确实比较强大,这是其它一般框架所不具备的,但所谓成也萧何败也萧何,提供如关系数据库般得功能,

结果把简单问题复杂化了,反而在缓存,复杂查询,自由SQL支持方面显得不足(对自由SQL的支持实际上是违背AEF框架的目标的)。

 

 TMG-MT4 是基于迈达克MT4软件内核与界面的基础上融合TMG领先的交易科技而成。由于传统MT4软件无法兼容TMG的交易网络,因此对其关键部分和网络传输做了进一步优化,完美实现了和TMG交易网络的互联互通,其稳定性和交易执行水平大幅度提升,出色的交易性能在业绩有口皆碑,深受世界投资者欢迎。   TMG平台的成功源于其独特的算法分配指令。 近年,随着交易科技的快速发展,算法交易的增多明显改善了外汇市场的健康程度。高频算法交易为整个市场提供了无缝的流动性,它能连接到多个ECN(Electronic Communication Network)电子通讯网络,将客户零散的订单直接进入银行间的交易系统。   它适用于外汇, CFD 以及期货市场,也提供免费模拟帐户共新学习使用,析周期真实体验国际市场上的投资品种。   监管机构:美国财政部( 一级自营商),美国证监会,美国金融业管理局 特点:   1. 全中文界面,完全免费使用,目前国内拥有100万个注册用户。   2. TMG是世界最大衍生品投资公司其数据均直接来源于交易所与货币中心银行,具有快速 安全 稳定的优势   3. 强大的图表分析功能,提供36种国际流行技术指标,18种画线工具,9种时间分 。   4, 交易产品十分丰富 提供外汇 ,黄金,白银,原油,美元指数等产品交易。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值