当前位置: 首页 > news >正文

seo怎么做网站内容线上推广员的工作内容

seo怎么做网站内容,线上推广员的工作内容,电子商务平台经营者接到通知后,关于网站建设的调查报告在上一篇我们在宏观概要上对DAL层进行了封装与抽象。我们的目的主要有两个#xff1a;第一#xff0c;解除BLL层对DAL层的依赖#xff0c;这一点我们通过定义接口做到了#xff1b;第二#xff0c;使我们的DAL层能够支持一切数据访问技术,如Ado.net,EF,linq To Sql#x…     在上一篇我们在宏观概要上对DAL层进行了封装与抽象。我们的目的主要有两个第一解除BLL层对DAL层的依赖这一点我们通过定义接口做到了第二使我们的DAL层能够支持一切数据访问技术,如Ado.net,EF,linq To Sql这一点我们实现的不是很完美仍有很大的改进空间本文将加以改进。     在此之前我们来看一下我们最新的domPS:经过两天的赶工我们的dom已经相对成熟其中BLL层已经被我高度抽象化了并且引进了业务上文文的概念DAL层除了具体的技术实现尚为完成其他方面已经相对完善了      DAL层的AdoDal项目和EFDAL项目分别代表采用ado.net技术和EF技术实现数据访问层我在这两个项目中分别定义了一个OrderDAL测试类 和一个RolesDal测试类代码如下 using IDAL; using Model; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AdoDal {public class OderDAL : DALBaseOrder, IOrderDAL{public OderDAL(IDbConnection dbConnection){}public override string TestMethod(){return 现在测试的是Ado的Oder类;}} } View Code using IDAL; using Model; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AdoDal {public class RolesDal : DALBaseRoles, IRoles{public RolesDal(IDbConnection dbConnection){}public override string TestMethod(){return 现在测试的是Ado的roles类;}} } View Code using EFDal; using IDAL; using Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace EFDal {public class OderDAL : DALBaseOrder, IOrderDAL{public override string TestMethod(){return 现在测试的是EF的Oder类;}} } View Code using IDAL; using Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace EFDal {public class RolesDal : DALBaseRoles, IRoles{public override string TestMethod(){return 现在测试的是EF的roles类;}} } View Code    我们在BLL项目中的OrderBLL类来调用这RolesDal与OrderDAL的测试方法TestMethod()。注我们的BLL层并没有引用DAL层我们得到的DAL层实例是通过工厂运用反射来实现的至于反射得到的OrderDALRolesDal是来自AdoDal项目还是EFDAL项目完全是由我们的配置文件决定的调用代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Model; using IDAL; using Common; using CommonFactory; using IBLL;namespace BLL {public class OrderBLL : BLLBaseOrderBusiness,IOrderBLL{public OrderBLL(){BusinessContext InstancesFactory.CreateInstancesIBusinessContext(FactoryConfig.BusinessContext.AssemblyPath, FactoryConfig.BusinessContext.ClassName);}#region IOrderDAL的专用方法public string Test(){string str1 BusinessContext.DALSession.RolesDal.TestMethod();string str2 BusinessContext.DALSession.OrderDal.TestMethod();string str string.Format(角色测试{0} 订单测试{1},str1,str2);return str;}#endregion} } View Code   我们的UI层项目StructUI也实现了与BLL层的解耦它并没有引用BLL它得到的BLL层实例同样是采用工厂根据配置文件通过反射来实现的。如下 using Common; using CommonFactory; using IBLL; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;namespace StructUI {public partial class Test : System.Web.UI.Page{protected IBussinessSession session;IBussinessSessionFactory factory;protected void Page_Load(object sender, EventArgs e){factory InstancesFactory.CreateInstancesIBussinessSessionFactory(FactoryConfig.BussinessSessionFactory.AssemblyPath, FactoryConfig.BussinessSessionFactory.ClassName);session factory.GetSession();string str session.OrderBussiness.Test();txtInfo.InnerText str;} } } View Code    从上面我们知道UI层的页面是通过工厂创建OrderBussiness实体然后调用Test()方法在把结果展示在前台的文本域中。好了现在我们来开始测试。首先我们通过配置文件来设置对EFDAL项目中的OrderDAL和RolesDal实体进行测试我们配置文件如下   结果如图 接着我们改变我们的配置文件代码如下   结果如下    综上我们的框架实现了对数据访问层各类技术的支持同时我们的成功的解除了框架中层与层的依赖UI依赖BLLBLL依赖DAL。   下面我们来看一看目前版本的数据访问层相对于上一篇的数据访问层的改进对照我们上一篇的项目结构下图我们发现在的数据访问层的DAL项目被干掉了AdoDalEFDal与DALFactory这三个新项目被添加进来了。        先说一说我干掉DAL同时又添加AdoDalEFDal的原因。在上一篇文章我们把对不同数据访问技术的实现寄托在ADOBaseT类型与EFBaseT类型上面这两个类型最终将赋值给数据访问层基类的dalActive属性来帮助基类实现数据层接口至于是哪一个则由配置文件说了算我们采用工厂读取配置文件来创建这两个类型的实例但是这里会碰到一个技术难题这两个类型都是范型我们无法事先知道该类型的范型参数在实例化时会是一个什么样的类型所以我们没办法通过反射来动态读取程序集和类名创建对应的范型实例因此在上一篇我采用了一个非常简陋的工厂方来创建如下 using IDAL; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text;namespace DAL {public class DalActiveProviderT where T:class,new(){private static string className ConfigurationManager.AppSettings[dalActiveName];public static IDALBaseT GetDalActive(){if (string.Equals(className, EFBase)){return new EFBaseT();}else{return new ADOBaseT();}}} } View Code     这样我们就通过条件判断语句写死了程序数据访问层所能使用的技术在这个工厂里面除了ado.net和EF它将不会去创建其他任何技术的访问实体。我们想要增加一种新的技术则必须重新修改工厂的代码,这样就违背了软件工程的一个原则一个好的框架应该是在需要什么功能的时候去扩展而不应该是去修改以前的代码。    另一个促使我改变程序框架的原因是因为我们目前的这种业务背景和抽象工厂模式相当的吻合。我们数据访问层采用什么技术业务逻辑层根本就不关心我们完全可以定义两个工厂来创建两种不同技术的实例然后根据配置文件来决定采用哪一个工厂。但是这里我们必须设想一种情况那就是我们的数据访问层的实体相当的多如果我们每一个实体都用工厂来创建的话那么配置文件肯定会很大配置文件的节点一多起来第一个不便于维护第二个不便于理解。因此我们必须找到替代的方法我在数据访问层定义了2个仓库类型ADOSession与EFSession。其中ADOSession用于获取AdoDal项目中的所有数据访问实体EFSession用于获取EFDal项目中的所有实体代码如下 using IDAL; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AdoDal { public class ADOSession : ISession { private IDbConnection dbConnection; public ADOSession(IDbConnection con) { dbConnection con; } public IOrderDAL OrderDal { get { return new OderDAL(dbConnection); } } public IUsers UserDal { get { return new UsersDal(dbConnection); } } public IRoles RolesDal { get { return new RolesDal(dbConnection); } } } } View Code using EFDal; using IDAL; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EFAdo { public class EFSession : ISession { public IOrderDAL OrderDal { get { return new OderDAL(); } } public IUsers UserDal { get { return new UsersDal(); } } public IRoles RolesDal { get { return new RolesDal(); } } } } View Code    ADOSession类型中在构造函数中需要传入了一个IDbConnection数据库连接实体很显然这个IDbConnection会来自BLL层,这是因为我们的业务层需要有定制事务的能力因此它必须能够得到IDbConnection来发起事务当一个事务被发起时所有在事务期间被创建的数据访问实体对数据库的操作必须是基于事务发起这的IDbConnection这样的操作才受事务的控制。因此这就要求我们的BLL层在创建DAL数据实体有定义该实体的IDbConnection的能力,很显然在构造函数中传入统一的IDbConnection是一个不错的选择。    好了ADOSessionEFSession我们都有了现在我们假设我们如果能够在BLL层拿到这样的实体那么我们是不是就能够获得AdoDal或EFDal的所有实体呢?答案是显然的但是这样问题又来了我们BLL并没有引用DAL所以这两个仓库实体什么类型BLL肯定是不知道的BLL只认接口因此我们必须为仓库定义接口如下 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace IDAL {public interface ISession{IOrderDAL OrderDal{get;}IUsers UserDal{get;}IRoles RolesDal { get;}} } View Code    另外我们还必须有相应的实例化机制给BLL层的调用者提供实例化服务。因此我们想到提供两套数据访问层实例工厂来为调用者提供实例化至于到底选择哪一套工厂则完全由配置文件说了算。我们的两个工厂都实现了工厂接口代码如下 using AdoDal; using IDAL; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text;namespace DALFactory {public class ADOSessionFactory:ISessionFactory{private IDbConnection dbConnection;public ADOSessionFactory(IDbConnection con){dbConnection con;}public ISession GetSession(){return new ADOSession(dbConnection);}} } View Code using EFAdo; using IDAL; using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace DALFactory {public class EFSessionFactory : ISessionFactory{public ISession GetSession(){return new EFSession();}} } View Code using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace IDAL {public interface ISessionFactory{ISession GetSession();} } View Code    在BLL层的业务上下文中我们把对应的ISessionFactory在构造函数中通过工厂读取配置文件进行实例化代码如下 using Common; using CommonFactory; using IBLL; using IDAL; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text;namespace BLL {public class AdoBussinessContext : IBusinessContext{/// summary/// 链接字符串/// /summaryprotected IDbConnection Con{ get; private set; }protected ISessionFactory sessionFactory { get; private set; }public AdoBussinessContext(){ConnectionFactory factory new ConnectionFactory(str);Con factory.CreateConnection();sessionFactory InstancesFactory.CreateInstancesISessionFactory(FactoryConfig.SessionFactory.AssemblyPath,FactoryConfig.SessionFactory.ClassName, new object[]{ Con });}public ISession DALSession{get{return sessionFactory.GetSession();}}public IDbTransaction BeginTransaction(IsolationLevel level){return Con.BeginTransaction(level);}public IDbTransaction BeginTransaction(){return Con.BeginTransaction();}} } View Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection;namespace CommonFactory {public class InstancesFactory{/// summary/// 创建指定类型T的实例/// /summary/// typeparam nameT/typeparam/// param nameassemblyPath程序集路径/param/// param nameclassName类名称(非全名)/param/// returnsT类型实例/returnspublic static T CreateInstancesT(string assemblyPath, string className, object[] args null){className string.Format({0}.{1}, assemblyPath, className);Assembly assembly Assembly.Load(assemblyPath);T instances;if(args!null){instances(T)assembly.CreateInstance(className, true, BindingFlags.Default, null, args, null, null);}else{try{instances (T)assembly.CreateInstance(className);}catch(Exception ex){throw ex;}}return instances;}} } View Code using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text;namespace Common {public class ConfigEntity{/// summary/// 程序路径/// /summarypublic string AssemblyPath { get; set; }/// summary/// 类命/// /summarypublic string ClassName { get; set; }}public class FactoryConfig{public static ConfigEntity SessionFactory{get {return new ConfigEntity(){AssemblyPath ConfigurationManager.AppSettings[SessionFactoryAssemblyPath],ClassName ConfigurationManager.AppSettings[SessionFactory]};}}public static ConfigEntity BusinessContext{get{return new ConfigEntity(){AssemblyPath ConfigurationManager.AppSettings[BusinessContextAssemblyPath],ClassName ConfigurationManager.AppSettings[BusinessContext]};}}public static ConfigEntity BussinessSessionFactory{get{return new ConfigEntity(){AssemblyPath ConfigurationManager.AppSettings[BussinessSessionFactoryAssemblyPath],ClassName ConfigurationManager.AppSettings[BussinessSessionFactory]};}}} } View Code    配置文件参见本文DOM演示部分在BLL层的业务上下文我们就可以通过ISessionFactory拿到ISession实体了有了ISession实体我们就有了基于一种数据访问技术的所有数据访问层的实体了。我们BLL层可以大摇大摆的调用我们的数据访问实体操作数据库了。至此我们的数据访问层的抽象已经基本完成剩下来的就是把数据访问层AdoDalEFDal两个项目中的具体技术细节全部实现这将是我后续文章的内容呢....... 总结     本文在上一篇文章的基础上面继续优化了数据访问层使我们的数据访问层更加的完善与成熟。一个好的应用框架总是运用中被不断的完善我们在开发的时候多想一想我们所用框架的局限性我们总能找到相应的优化点最后感谢大家的观看本文DOM的源码请点击  这里  转载于:https://www.cnblogs.com/shaoshun/p/3813640.html
http://www.zqtcl.cn/news/551612/

相关文章:

  • 网站常见问题网页设计代码开头
  • 聊城网站推广品牌推广计划描述
  • 池州网站制作优化有没有专业做特产的网站
  • wordpress采集站源码wordpress好用的会员插件
  • 寿县城乡建设局网站青岛网站建设大全
  • 杭州做网站的好公司哪家好做影视网站侵权吗
  • 自助建站网站seo公司想学编程做网站
  • 网站空间备案要多久花木公司网站源码
  • 高端求职网站排名ftontpage如何做网站
  • 音乐网站开发技术河南省住房和城乡建设门户网站
  • 吉安微信网站弋阳县建设工程网站
  • 网站建设自学建站视频教程哈尔滨全国网站建设
  • 网站建设基础培训网站架构拓扑图
  • 网站开发价格预算成都必去的地方排行榜
  • 鹤岗做网站企业建立网站主要包括那些流程
  • 如何进网站出口外贸是做什么的
  • 网站制作北京网站建设公司哪家好一个人 建设网站
  • 百度网站是什么阿里云免费网站建设
  • 网站建设平台源码攻击网站步骤
  • 注册了网站之后怎么设计深圳开发app
  • 国外网站搭建平台移动互联网公司
  • 做网络私活的网站网站开发的人
  • 数据分析网站开发四川手机网站设计方案
  • 什么是网络营销的方法莱州网站建设关键字排名优化网络托管微信代运营
  • 雅虎网站收录提交入口怎么看网站谁做的
  • 青浦专业做网站免费网站软件大全
  • joomla 网站图标六安市城市建设档案馆网站
  • 郑州 公司网站制作win10 wordpress安装
  • html5网站有哪些网站建设部分费用会计科目
  • 网站域名备案 更改吗深圳新站优化