博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
支持SQL Server数据库又支持MongoDB数据库的数据访问设计
阅读量:5828 次
发布时间:2019-06-18

本文共 3289 字,大约阅读时间需要 10 分钟。

网站整体架构建议采用工厂模式

分别包括:数据访问层DAL,数据访问接口层IDAL,工厂层DALFactory,业务逻辑层,显示层这样的架构方式

在WebConfig配置采用何种数据库的数据访问层

定义接口层

public interface ILocal_TopicDAL    {        ///         /// 根据问题ID获取问题详细        ///         /// 问题ID        /// 
Local_TopicModel getTopicById(int LT_ID, string sCityCode, string sLanguage);}

数据访问层继承接口层

public class Local_TopicDAL : ILocal_TopicDAL    {        #region 根据问题ID获取问题详细        ///         /// 根据问题ID获取问题详细        ///         /// 问题ID        /// 城市代码        /// 语言        /// 
public Local_TopicModel getTopicById(int LT_ID, string sCityCode, string sLanguage) { string sql = "select LT_ID,LT_Title,LT_ThanksInfo,LT_Content,LT_ViewCount,LT_CommentCount,LTC_ID,LT_UpdateDate,LT_LastReplyDate,"+ "LT_Checked,isnull(LT_Status,0) as LT_Status,isnull(LM_ID,0) as LM_ID,LM_NickName,LT_IsEffectiveDate,LT_EffectiveDate,LT_CreateDate," + "LTT_ID"+ ",LTK_IDs,LT_AboutIds"+ " from Local_Topic"+ " where LT_Checked=1 and LT_ID=@LT_ID"; string ConnectionString = ConnectionManage.getConnectionString(sCityCode, sLanguage);//EdushiDataCenter.Current.CityConfigProvider.GetCitySetting(sCityCode, sLanguage).ECS_DBConnectString; SqlParameter[] parameters = { new SqlParameter("@LT_ID", SqlDbType.Int, 4) }; parameters[0].Value = LT_ID; DataTable dt = DbHelperSQL.Query(sql, ConnectionString, parameters).Tables[0]; if (dt.Rows.Count > 0) { return DatableToList.CreateItem
(dt.Rows[0]); } else { return new Local_TopicModel(); } } #endregion

工厂层根据DAL路径通过反射创建数据访问实例

private static readonly string AssemblyPath = ConfigurationManager.AppSettings["DAL"];//数据访问层的程序集  #region 创建对象(不使用缓存)        ///         /// 创建对象(不使用缓存)        ///         ///         ///         /// 
private object CreateObjectNoCache(string AssemblyPath, string ClassNamespace) { try { object objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace); return objType; } catch(Exception ex) { LogOperate.WriteErrorLog("创建反射异常(不使用缓存)", ex); return null; } }

业务逻辑层通过调用反射的数据访问实例来执行具体方法

#region 根据问题ID获取问题详细        ///         /// 根据问题ID获取问题详细        ///         /// 问题ID        /// 
public Local_TopicModel getTopicById(int LT_ID) { CacheConfigModel ccm = new CacheConfigHelper().getCacheConfigModelByCacheId(3, ConfigurationManager.AppSettings["sectionName"].ToString()); string key = string.Format(ccm.CacheKey, _cityCode, LT_ID); object obj = cache.Get(key); if (obj == null) { object objType = new DataAccess().CreateObject("Local_TopicDAL");//创建Local_Topic的实例 obj = objType == null ? new Local_TopicModel() : ((ILocal_TopicDAL)objType).getTopicById(LT_ID, _cityCode, _language); cache.Add(key, obj, DateTimeOffset.Now.AddSeconds(ccm.CacheTime)); } return obj as Local_TopicModel; } #endregion

 

转载地址:http://xzodx.baihongyu.com/

你可能感兴趣的文章
P1352 没有上司的舞会
查看>>
ios11文件夹
查看>>
【HLOJ 559】好朋友的题
查看>>
Electric Fence(皮克定理)
查看>>
nvl 在mysql中如何处理
查看>>
MyEclipse 快捷键
查看>>
快速傅里叶变换FFT
查看>>
大数据常用基本算法
查看>>
JavaScript学习笔记(十三)——生成器(generator)
查看>>
hibernate保存失败
查看>>
MySQL增量订阅&消费组件Canal POC
查看>>
Sqlite多线程
查看>>
数据结构-时间复杂度
查看>>
对象与字符串相互转换
查看>>
[NOIp2017提高组]小凯的疑惑
查看>>
《C程序设计语言》练习1-5
查看>>
$\frac{dy}{dx}$ 是什么意思?
查看>>
Go开发之路(目录)
查看>>
RHEL6.5安装成功ORACLE11GR2之后,编写PROC程序出错解决方法
查看>>
(50)与magento集成
查看>>