网站开发招标前提,百度seo推广软件,seo优化一般包括,wordpress七牛云上传图片问题由来 最近在研究适合团队开发的web架构解决方案#xff0c;该架构即要适合分工协作又要有一定扩展性#xff0c;适合不同的数据库需要#xff0c;因此我查阅了一些资料#xff0c;初步构想出了一套架构#xff0c;请各位多多指教。 探索 web开发架构最经典莫过于三层架…问题由来 最近在研究适合团队开发的web架构解决方案该架构即要适合分工协作又要有一定扩展性适合不同的数据库需要因此我查阅了一些资料初步构想出了一套架构请各位多多指教。 探索 web开发架构最经典莫过于三层架构表示层、逻辑层、数据处理层。 数据访问层其功能主要是负责数据库的访问。 业务逻辑层是整个系统的核心它与这个系统的业务领域有关。 表示层是系统的UI部分负责使用者与整个系统的交互。理想的状态是表示层不应包括系统的业务逻辑。 这些是经典的解释如果要适合不同的数据库则需要加入工厂模式里面用面向接口的方式进行多态调用。是不是这有点像petshop了。所以架构的初步设想是这样 下面以获取用户信息为例简述这个架构的流程以下为类似petshop的经典做法了解的可以略过 step 1 、首先我们应该建立项目所需的实体模型在这里新建用户信息的实体模式UserInfo.cs。该类保存在Model项目里。 step 2 、我们再将项目的单元功能写到相关的接口中这里以获取用户信息功能为例。在IDAL项目里新建IUser接口。 //根据用户ID获取用户信息 UserInfo GetUserById(int userId); step 3、完成了接口我们就要实现它现在我们用sqlserver、oracle两种数据库访问方式来实现它。以下是SqlserverDAL中User类对接口的现实 public class User:IUser { public UserInfo GetUserById(int userId) { //实现操作 } } OracleDAL中现实方式类似。。。。 step 4、在此数据库访问层应该就基本写好了下面应该给逻辑层调用了但是两种实现方式怎么调用呢或者说怎么有选择的调用它呢petshop是这样处理的在DALFactory中的DataAccess类利用反射载入程序集从而实例化所需要的类 private static readonly string path ConfigurationManager.AppSettings[WebDAL]; public static IUser CreateUser() { string className path .User; return (IUser)Assembly.Load(path).CreateInstance(className); } 至于要选择哪个数据库访问层在配置文件里配置一下WebDAL。如add keyWebDAL valueSQLServerDAL/。 这样就基本解决了逻辑层和数据访问层的耦合。 step 5、下面就该写逻辑层了在BLL里面创建User.cs类。大致如下 public class User { private static readonly IUser dal DALFactory.DataAccess.CreateUser(); public UserInfo GetUserInfo(int userId) { return dal.GetUserById(userId); } } 是不是觉得BLL毫无意义因为它只是对数据访问层方法的简单调用但并不是这样的这里只有一个简单的事例在实际项目中一个BLL里面处理的可能是一个非常复杂的逻辑而这个复杂逻辑的结果才提供给表示层显示。 step 6、最后是表示层好像没什么可说的把从BLL取出来的数据绑定到你的页面就行了。 以上是仿petshop的架构设计看起来没什么质疑的地方毕竟是微软的经典案例。你可能抱怨的地方有两点一是层是不是有点多关系过于复杂二如果我需要改变或增加一个数据库字段那不是会很痛苦因为要节联修改。这两个问题我都没办法解决一如果说过于层过于多而繁琐那么下面我写的好像更为复杂原谅。。。。二、鄙人觉得凡是分层开发只要以数据库字段为依据的建立实体模型都会存在节联修改的问题。除非全部用DataTable那么在BLL、表示层调用的时候并不知道DataTable到底装有什么这样无疑更加了调用的不便利。关于减少节联修改的问题如有解决方法的请指教。 对以上架构的修改 我重点分析了以上架构的数据访问工厂的设计部分即DALFactory中的DataAccess类。在此类中实现了对不同数据库访问层的调用 。但如果现在有一个项目里面有sqlserver又有oracle的现实我们是不是要这样做 private static readonly string path ConfigurationManager.AppSettings[WebDAL];//对sqlserver数据库访问层的调用 private static readonly string path2 ConfigurationManager.AppSettings[WebDAL2];//对oracel数据库访问层的调用 public static IUser CreateUser() { string className path .User; return (IUser)Assembly.Load(path).CreateInstance(className); } public static IOrder CreateOrder() { string className path2 .Order; return (IUser)Assembly.Load(path2).CreateInstance(className); } 如果要创建其他的访问类我们还要写CreateProduct(),CreateArticle,CreateMenu。。。。。那么这样的类会很繁琐我们能不能 只做一个方法其他的工作只需要开发人员通过配置文件来完成呢。我的解决方案有两个 一、Spring.net 这个东西就是专门用来解耦合的我们将它的相关程序集加载到DALFactory中于是在DataAccess中我们可以做 private static readonly string configPath HttpContext.Current.Request.PhysicalApplicationPath ConfigurationManager.AppSettings[objectconfig];//这是spring.net的对象配置文件在服务器上的物理位置 public static T CreateObjectT() { IResource rs new FileSystemResource(configPath); IObjectFactory factory new XmlObjectFactory(rs); string id typeof(T).FullName; return (T)factory.GetObject(id); } 这里我们传入一个泛型让spring.net在它的对象配置文件里面找到该类型的程序集并加载创建出对应的对象。objectconfig文件 大致如下 ?xml version1.0 encodingutf-8 ?objects xmlnshttp://www.springframework.net/ xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.net/http://www.springframework.net/xsd/spring-objects.xsd object idIDAL.IUser typeSQLServerDAL.Function/object /objects 这样在BLL 就这样调用 private static readonly IUser dal EtourAF.Shared.DALFactory.DataAccess.CreateObjectIUser(); 这样开发人员如果要加入一个对象就在object-config中加一段相关配置就行了。嘿嘿这就变成了petshopspring.net了YY无极限。。。。 二、也是用反射 这里我们只是用了一个键值对的方式照例在配置文件里配置相应的接口和对象只是我们把他配置到了web.config当中 add keyIDAL.IUser valueSQLServerDAL.Function / 在DataAccess中我们就这样写 public static T CreateObjectT() { string interfaceFullName typeof(T).FullName; string className ConfigurationManager.AppSettings[interfaceFullName]; string nameSpace className.Substring(0, className.LastIndexOf(.)); return (T)Assembly.Load(nameSpace).CreateInstance(className); } 可能有人说string nameSpace className.Substring(0, className.LastIndexOf(.));这里这个截取是不是觉得有点硬我现在也只想到这个办法但绝对不会有问题的。 好了这些大概就是鄙人这两天的有些收获请指教。转载于:https://www.cnblogs.com/aaa6818162/archive/2009/08/05/1539246.html