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

建设银行网站打不开别的网站可以吗十大免费跨境app

建设银行网站打不开别的网站可以吗,十大免费跨境app,做的网站打印全乱掉了,英文版网站怎么做我们设计的分层架构#xff0c;层与层之间应该是松散耦合的。因为是单向单一调用#xff0c;所以#xff0c;这里的“松散耦合”实际是指上层类不能具体依赖于下层类#xff0c;而应该依赖于下层提供的一个接口。这样#xff0c;上层类不能直接实例化下层中的类#xff0…我们设计的分层架构层与层之间应该是松散耦合的。因为是单向单一调用所以这里的“松散耦合”实际是指上层类不能具体依赖于下层类而应该依赖于下层提供的一个接口。这样上层类不能直接实例化下层中的类而只持有接口至于接口所指变量最终究竟是哪一个类则由依赖注入机制决定。 之所以这样做是为了实现层与层之间的“可替换”式设计例如现在需要换一种方式实现数据访问层只要这个实现遵循了前面定义的数据访问层接口业务逻辑层和表示层不需要做任何改动只需要改一下配置文件系统即可正常运行。另外基于这种结构的系统还可以实现并行开发。即不同开发人员可以专注于自己的层次只有接口被定义好了开发出来的东西就可以无缝连接。 在J2EE平台上主要使用Spring框架实现依赖注入。这里我们将自己做一个依赖注入容器。 依赖注入的理论基础是Abstract Factory设计模式这里结合具体实例简单介绍一下。 上图以数据访问层为例展示了Abstract Factory模式的应用。如图现假设有针对Access和SQLServer两种数据库的数据访问层它们都实现了数据访问层接口。每个数据访问层有自己的工厂所有工厂都实现自IDALFactory接口。而客户类这里就是业务逻辑层类仅与工厂接口、数据访问层接口耦合而与具体类无关这样只要通过配置文件确定实例化哪个工厂就可以得到不同的数据访问层。   然而这种设计虽然可行但是代码比较冗余因为这样需要为数据访问层的每一个实现编写一个工厂业务逻辑层也一样。在以前我们毫无办法但是.NET平台引入的反射机制给我们提供了一种解决方案。使用反射每个层只需要一个工厂然后通过从配置文件中读出程序集的名称动态加载相应类。另外为了提高依赖注入机制的效率这里引入缓存机制。下面来看具体实现。 配置首先需要在Web工程的Web.config文件的appSettings节点下添加如下两个项add keyDAL value/add keyBLL value/   这两个配置选项分别存储要应用的数据访问和也业务逻辑层的程序集名称。value目前是空是因为目前还没有各个层次的具体实现。 实现缓存操作辅助类 为实现缓存操作我们将缓存操作封装成一个辅助类放在Utility工程下具体代码如下   using System;using System.Web;using System.Web.Caching;namespace NGuestBook.Utility{    /**//**//**//// summary    /// 辅助类用于缓存操作    /// /summary    public sealed class CacheAccess    {        /**//**//**//// summary        /// 将对象加入到缓存中        /// /summary        /// param namecacheKey缓存键/param        /// param namecacheObject缓存对象/param        /// param namedependency缓存依赖项/param        public static void SaveToCache(string cacheKey, object cacheObject, CacheDependency dependency)        {            Cache cache  HttpRuntime.Cache;            cache.Insert(cacheKey, cacheObject, dependency);        }        /**//**//**//// summary        /// 从缓存中取得对象不存在则返回null        /// /summary        /// param namecacheKey缓存键/param        /// returns获取的缓存对象/returns        public static object GetFromCache(string cacheKey)        {            Cache cache  HttpRuntime.Cache;            return cache[cacheKey];        }    }}    封装依赖注入代码 因为很多依赖注入代码非常相似为了减少重复性代码我们将可复用的代码先封装在一个类中。具体代码如下这个类放在Factory工程下     using System;using System.Configuration;using System.Reflection;using System.Web;using System.Web.Caching;using NGuestBook.Utility;namespace NGuestBook.Factory{    /**//**//**//// summary    /// 依赖注入提供者    /// 使用反射机制实现    /// /summary    public sealed class DependencyInjector    {        /**//**//**//// summary        /// 取得数据访问层对象        /// 首先检查缓存中是否存在如果不存在则利用反射机制返回对象        /// /summary        /// param nameclassName数据访问类名称/param        /// returns数据访问层对象/returns        public static object GetDALObject(string className)        {            /**//**//**//// summary            /// 取得数据访问层名称首先检查缓存不存在则到配置文件中读取            /// 缓存依赖项为Web.Config文件            /// /summary            object dal  CacheAccess.GetFromCache(DAL);            if (dal  null)            {                CacheDependency fileDependency  new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config));                dal  ConfigurationManager.AppSettings[DAL];                CacheAccess.SaveToCache(DAL, dal, fileDependency);            }            /**//**//**//// summary            /// 取得数据访问层对象            /// /summary            string dalName  (string)dal;            string fullClassName  dalName  .  className;            object dalObject  CacheAccess.GetFromCache(className);            if (dalObject  null)            {                CacheDependency fileDependency  new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config));                dalObject  Assembly.Load(dalName).CreateInstance(fullClassName);                CacheAccess.SaveToCache(className, dalObject, fileDependency);            }            return dalObject;        }        /**//**//**//// summary        /// 取得业务逻辑层对象        /// 首先检查缓存中是否存在如果不存在则利用反射机制返回对象        /// /summary        /// param nameclassName业务逻辑类名称/param        /// returns业务逻辑层对象/returns        public static object GetBLLObject(string className)        {            /**//**//**//// summary            /// 取得业务逻辑层名称首先检查缓存不存在则到配置文件中读取            /// 缓存依赖项为Web.Config文件            /// /summary            object bll  CacheAccess.GetFromCache(BLL);            if (bll  null)            {                CacheDependency fileDependency  new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config));                bll  ConfigurationManager.AppSettings[BLL];                CacheAccess.SaveToCache(BLL, bll, fileDependency);            }            /**//**//**//// summary            /// 取得业务逻辑层对象            /// /summary            string bllName  (string)bll;            string fullClassName  bllName  .  className;            object bllObject  CacheAccess.GetFromCache(className);            if (bllObject  null)            {                CacheDependency fileDependency  new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config));                bllObject  Assembly.Load(bllName).CreateInstance(fullClassName);                CacheAccess.SaveToCache(className, bllObject, fileDependency);            }            return bllObject;        }    }} 实现工厂      下面使用两个辅助类实现数据访问层工厂和业务逻辑层工厂。     using System;using NGuestBook.IDAL;namespace NGuestBook.Factory{    /**//**//**//// summary    /// 数据访问层工厂用于获取相应的数据访问层对象    /// 使用Abstract Factory设计模式Facace设计模式反射机制缓存机制设计    /// /summary    public sealed class DALFactory    {        /**//**//**//// summary        /// 获取管理员数据访问层对象        /// /summary        /// returns管理员数据访问层对象/returns        public static IAdminDAL CreateAdminDAL()        {            return (IAdminDAL)DependencyInjector.GetDALObject(AdminDAL);      }        /**//**//**//// summary        /// 获取留言数据访问层对象        /// /summary        /// returns留言数据访问层对象/returns        public static IMessageDAL CreateMessageDAL()        {            return (IMessageDAL)DependencyInjector.GetDALObject(MessageDAL);        }        /**//**//**//// summary        /// 获取评论数据访问层对象        /// /summary        /// returns评论数据访问层对象/returns        public static ICommentDAL CreateCommentDAL()        {            return (ICommentDAL)DependencyInjector.GetDALObject(CommentDAL);        }    }}   using System;using NGuestBook.IBLL;namespace NGuestBook.Factory{    /**//**//**//// summary    /// 业务逻辑层工厂用于获取相应的业务逻辑层对象    /// 使用Abstract Factory设计模式Facace设计模式反射机制缓存机制设计    /// /summary    public sealed class BLLFactory    {        /**//**//**//// summary        /// 获取管理员业务逻辑层对象        /// /summary        /// returns管理员业务逻辑层对象/returns        public static IAdminBLL CreateAdminBLL()        {            return (IAdminBLL)DependencyInjector.GetBLLObject(AdminBLL);        }        /**//**//**//// summary        /// 获取留言业务逻辑层对象        /// /summary        /// returns留言业务逻辑层对象/returns        public static IMessageBLL CreateMessageBLL()        {            return (IMessageBLL)DependencyInjector.GetBLLObject(MessageBLL);        }        /**//**//**//// summary        /// 获取评论业务逻辑层对象        /// /summary        /// returns评论业务逻辑层对象/returns        public static ICommentBLL CreateCommentBLL()        {            return (ICommentBLL)DependencyInjector.GetBLLObject(CommentBLL);        }    }} 转载于:https://www.cnblogs.com/dreamszx/archive/2008/08/01/1258068.html
http://www.yutouwan.com/news/169914/

相关文章:

  • 佛山做网站-准度科技公司哪里可以做网站推广
  • 安卓和网站开发找工作snippets wordpress
  • 网站前端用的到ps美食电子商务网站建设策划书
  • 济南网站建设推荐q479185700强涵优质网站建设方案
  • 正规网站制作价格企业简介优势项目案例等推广
  • 营销型单页网站黑龙江省建设工程网
  • 刚做的网站怎么织梦如何仿手机网站
  • 用vs2010做网站导航WordPress文章相似推荐
  • 网站备案 拉黑开发网站公司排行
  • 新浪推网站wordpress多媒体设置
  • 网站怎么自适应西安网站托管排名
  • 制作的网站如何访问南充网站建设费用
  • 阿里云个人网站备案过程全记录wordpress移动端底部导航栏
  • 要建设一个网站需要什么手续怀柔网站制作
  • 两学一做网站安徽省怎么制作网页内容
  • 规范网站建设的通知成都软件开发公司排名
  • 网站建设外包名词解释成品网站是什么意思
  • 国外交互设计网站欣赏html网页设计代码作业正能量
  • 网站欧美风格免费解析网站制作
  • 宁波高等级公路建设指挥部网站wordpress关闭评论审核
  • 佛山网站制作哪家好吉林省建设厅网站二建管理系统
  • wordpress能做多大的站网站只做1单生意被罚4万两级违法
  • 做企业网站的意义网页设计师招聘条件
  • 河北建设厅网站没有注册怎么做网站设计
  • 网站建设费算办公费吗网站制作手机
  • 信誉好的手机网站建设网站 备案已注销
  • 给公司做门户网站什么是网站的后台
  • 专门做中式的设计网站外贸公司怎么注册
  • 营口网站开发免费优化
  • 吉林省电力建设总公司网站3d房屋建筑设计软件