1简单的三层架构DALBLLUIModelCommon2Common和ModelCommon里放置可被多个层使用的通用类和工具类。Model放置数据传输对象DTO,和实体一一对应,只包含属性,不包含方法。3创建数据访问层(DAL)使用自定义的类作为数据访问层,来和数据库交互,用来填充DTO对象和保存DTO。一个实体对应一个数据访问类包括读取、插入、修改以及删除等方法数据访问类使用DBObject类访问数据库教师传输对象Teacher类:publicclassTeacher{privatestring_teacherID;privatestring_departmentID;privatestring_teacherName;privatestring_sex;privateDateTime?_birthday;privatestring_title;privatestring_major;publicTeacher(){}publicstringteacherID{get{return(_teacherID);}set{_teacherID=value;}}……publicstringmajor{get{return(_major);}set{_major=value;}}}数据访问层对象主要方法:方法名方法描述Add()向数据库表中添加一行数据,数据来源是传递进来的DTO对象Update()修改数据库表中的一行数据,数据来源是传递进来的DTO对象Delete()删除数据库表中的一行数据,是根据传递进来的主关键字值删除。GetAll()检索数据表中的所有行,返回值是一个List集合,集合中包含多个DTO对象,每个数据行对应的一个DTO对象。GetByID()根据主关键字检索一个数据行,返回一个对应的DTO对象。业务逻辑层业务对象类BLL\TeacherBll.cs封装业务规则–系统可以新增教师,但规定一个部门有最高人数编制,达到编制后不可增加。和数据库交互使用数据访问层对象TeacherDal业务对象的方法业务逻辑类会为页面显示层提供服务,为数据绑定控件提供数据绑定对应的方法,所以业务逻辑类也会包含数据修改类的添加、修改和删除方法,同时也会包含各种数据检索方法,这些方法也都是以DTO对象作为参数或者返回值的。除以上方法以外,还可以定义业务操作的各种方法。方法名方法描述Add()Update()Delete()GetAll()GetTeachersByDeptID()......与数据访问类中的方法都是一一对应的,会调用数据访问类的对应方法完成功能。界面层设计使用ObjectDataSource可以用来指定数据源来自于业务层的业务类。ObjectDataSource绑定到GridView、FormView等控件,完成对象的界面显示和操作。使用ObjectDataSource通过配置ObjectDataSource,我们指定这些底层的对象,还有这些对象的方法如何映射到ObjectDataSource的Select、Insert、Update和Delete上。对象被指定并且其方法映射到ObjectDataSource的方法后,就可以把ObjectDataSource绑定到页面上的DataWeb服务器控件使用ObjectDataSource在页面的生命周期中,DataWeb服务器控件可能需要访问它所绑定的数据,这将通过调用ObjectDataSource的Select方法来实现;如果这个服务器控件还支持插入、更新或者删除,那么将调用ObjectDataSource的Insert、Update或者Delete方法。这些调用会通过ObjectDataSource被发送到适当的底层对象的方法。使用ObjectDataSource可被ObjectDataSource的Insert、Update或者Delete方法使用的业务对象方法的格式:(传递的参数为DTO对象)publicvoidAdd(Bookbook)publicvoidUpdate(Bookbook)publicvoidDelete(Bookbook)使用ObjectDataSource或者:publicboolAdd(stringdepartmentNO,stringdepartmentName,stringdepartmentType)publicboolUpdate(stringdepartmentNO,stringdepartmentName,stringdepartmentType)publicboolDelete(stringdepartmentNO)使用ObjectDataSource可被ObjectDataSource的Select方法使用的业务对象方法的格式:publicListBookGetAll()publicListBookGetAllByCategoryID(intcategoryID)使用GridView和FormView及DetailsView选择自动套用格式自定义列使用绑定使用模板自定义显示注意:如果绑定ObjectDataSource控件的GridView要删除功能,必须在GridView中设置DataKeyNames(主键)添加客户端确认添加删除按钮的客户端确认,在按钮的html标签内添加:OnClientClick=returnconfirm(“真的删除?”)为GridView添加删除确认。–不针对本行提示,只要将按钮转换为模板列,然后在html按钮标签内按上述添加客户端确认–针对本行提示,需要在GridView的RowDataBound事件中编写程序问题的提出如果要实现跨数据库平台工作时该怎么办?(即:可以访问Access和SLQServer)解决方法是在解决方案里加入一个新的项目,这个项目存放的是可以访问MSSQLServer数据库的代码。然后,再通过一个“开关”来进行控制,当开关指向Access一端时,应用程序就可以运行在Access数据库平台上,而如果开关指向MSSQLServer那一端时,应用程序就运行在MSSQLServer数据库平台上。简单工厂设计模式简单工厂设计模式,又叫做静态工厂方法(StaticFactoryMethod)模式,就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。简单工厂设计模式是针对于创建类的对象的。一般涉及到三种角色:–抽象产品角色:由工厂方法模式所创建的对象的父类,一般由接口和抽象类实现。–具体产品角色:是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。–工厂角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。生活中的例子工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。示例:水果生产工厂工厂模式工厂模式关键用法:–建立抽象类DBObject或接口(图中Product),作为各种数据库数据访问对象类的基类。–建立两个具体类SqlObject和OracleObject,从DBObject派生(图中ConcreteProduct),分别使用各自不同的数据提供者对象完成数据库访问(去除if语句,增加内聚)。–建立一个工厂类DBFactory(图中Creator),专门负责建立对应的数据库数据访问对象。20工厂类制造对象实例,实际通常是要通过语言所提供的RTTI(RunTimeTypeIdentification运行时类型识别)机制来实现。在VisualC#.NET中,是通过“反射”来实现的。它被封装在“System.Reflection”名称空间下,通过C#反射,我们可以在程序运行期间动态地建立对象。数据访问层数据访问层工厂类配置文件中的设置中间层的代码中间层的代码时序图ListLWordLWordServiceSqlServerTask.LWordTasknewnewListLWordListLWordDALFactorynewDriveLWordTask缺陷如果要加入对新的数据库平台的支持,除去必要的新建数据访问层项目以外,还要在中间业务层InsetService项目中添加相应的依赖关系和代码。获取留言板信息的方法似乎是各自为政,没有统一的标准。如:在AccessTask项目中使用的是ListLWord函数来获取留言信息;而在SqlServerTask项目中则是使用GetLWords函数来获取。解决方法:在所有的数据访问层对象实例,都提供统一的函数名称“ListLWord函数”和“PostLWord函数”.这样中间业务层就不需要判断再调用了。接口(interface)接口用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。C#接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。接口的定义publicinterfaceILWordTask{//获取留言信息Lword[]ListLWord();//发送新留言信息到数据库voidPostLWord(LwordnewLWord);}数据访问层代码数据访问层工厂模式的代码publicILWordTaskDriveLWordTask(){//获取程序集名称stringassemblyName=ConfigurationSettings.AppSettings[AssemblyName];//获取默认构造器名称stringconstructor=ConfigurationSettings.AppSettings[Constructor];//建立AccessTask或者SqlServerTask对象实例return(ILWordTask)Assembly.Load(assemblyName).CreateInstance(constructor,false);}中间业务层代码工厂模式的优缺点优点:–工厂模式实现了对责任的分割,客户端只管消费,工厂只管创建。客户端完全不需要知道返回的对象是怎么样创建的。缺点:–新添加产品类必然导致工厂类的修改。–有限程度上支持开闭原则(要求一个系统的设计能够允许系统在无需修改的情况下扩展其功能)。–当具体的产品类有不同的接口种类时候,功能扩展较为困难。