zoukankan      html  css  js  c++  java
  • 当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层

     1: using System;
    
      2: using System.Collections.Generic;
    
      3: using System.Linq;
    
      4: using System.Text;
    
      5: using System.Data.Linq;
    
      6: using System.Threading;
    
      7: 
    
      8: namespace Data
    
      9: {
    
     10:     /// <summary>
    
     11:     /// LINQ数据库连接对象制造工厂
    
     12:     /// </summary>
    
     13:     static internal class DataContextFactory
    
     14:     {
    
     15: 
    
     16:         static System.Timers.Timer sysTimer = new System.Timers.Timer(10000);
    
     17: 
    
     18:         volatile static Dictionary<Thread, DataContext[]> divDataContext = new Dictionary<Thread, DataContext[]>();
    
     19: 
    
     20:         static public int DataContextCount { get { return divDataContext.Count; } }
    
     21: 
    
     22:         static DataContextFactory()
    
     23:         {
    
     24:             sysTimer.AutoReset = true;
    
     25:             sysTimer.Enabled = true;
    
     26:             sysTimer.Elapsed += new System.Timers.ElapsedEventHandler(sysTimer_Elapsed);
    
     27:             sysTimer.Start();
    
     28:         }
    
     29: 
    
     30:         static void sysTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    
     31:         {
    
     32:             List<Thread> list = new List<Thread>();
    
     33:             foreach (Thread item in divDataContext.Keys)
    
     34:             {
    
     35:                 if (item.ThreadState == ThreadState.Stopped)
    
     36:                 {
    
     37:                     list.Add(item);
    
     38:                 }
    
     39:             }
    
     40:             for (int index = 0; index < list.Count; index++)
    
     41:             {
    
     42:                 divDataContext.Remove(list[index]);
    
     43:                 list[index] = null;
    
     44:             }
    
     45:             list = null;
    
     46:         }
    
     47: 
    
     48:         /// <summary>
    
     49:         /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
    
     50:         /// </summary>
    
     51:         /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>
    
     52:         /// <returns>LINQ数据库连接对象</returns>
    
     53:         public static DataContext Intance(string dbName)
    
     54:         {
    
     55:             return Intance(dbName, Thread.CurrentThread);
    
     56:         }
    
     57:         /// <summary>
    
     58:         /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
    
     59:         /// </summary>
    
     60:         /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>
    
     61:         /// <param name="thread">当前线程引用的对象</param>
    
     62:         /// <returns>LINQ数据库连接对象</returns>
    
     63:         public static DataContext Intance(string dbName, Thread thread)
    
     64:         {
    
     65:             if (!divDataContext.Keys.Contains(thread))
    
     66:             {
    
     67:                 divDataContext.Add(thread, new DataContext[4]);
    
     68:             }
    
     69:             if (dbName.Equals("zzl"))
    
     70:             {
    
     71:                 if (divDataContext[thread][0] == null)
    
     72:                 {
    
     73:                     divDataContext[thread][0] = new Data.LinqzzlDataContext();
    
     74:                 }
    
     75:                 return divDataContext[thread][0];
    
     76:             }
    
     77:             else
    
     78:             {
    
     79:                 return null;
    
     80:             }
    
     81:         }
    
     82: 
    
     83:  
    
     84: 
    
     85:     }
    
     86: }
    
     87: 
  • 相关阅读:
    flume sink两种类型 file_rool 自定义sing com.mycomm.MySink even if there is only one event, the event has to be sent in an array
    为什么引入进程20年后,又引入线程?
    As of Flume 1.4.0, Avro is the default RPC protocol.
    Google Protocol Buffer 的使用和原理
    Log4j 2
    统一日志 统一订单
    网站行为跟踪 Website Activity Tracking Log Aggregation 日志聚合 In comparison to log-centric systems like Scribe or Flume
    Percolator
    友盟吴磊:移动大数据平台的架构、实践与数据增值
    Twitter的RPC框架Finagle简介
  • 原文地址:https://www.cnblogs.com/sjqq/p/7354172.html
Copyright © 2011-2022 走看看