代码改变世界

框架、项目结构

2009-02-08 12:37  宝宝合凤凰  阅读(560)  评论(0)    收藏  举报

框架、项目结构 2008-11-26 12:52

分类:ASP
字号:    

 

ORM框架

1、ADO.NET:把Command对象传到服务器端执行

SQL语句(入侵不安全)--->存储过程-----带参SQL语句---->280列的大表

大型系统:C/S + B/S

辅助工具常用C/S写:代码生成工具:CodeSmith、CodePlus、动软

2、ORM框架:对象关系映射,数据访问层

把数据库面向对象:表<---->对象,只对类型(属性、方法)操作,映射到对数据库表的操作

会配置文件.cst(XML),简化数据库操作

真正学一门东西,是关注其官网

根据需求定方案,Connection多少个,单例模式(private构造、public static方法取该类实例)、多例模式

公司之间框架不同,不太有人用别人框架

Oracle的ORM:TopLink

.NET的ORM框架:

       NBear:不熊 = 牛,开源,按表结构画好类图,生成所有.cs,就象Rational XDE、VS2005

NHibernate + CodeSmith:和Hibernate一样,用了反射、缓存、事务处理等思想

Spring.NET:

缺点:conn什么时候Close()不知道,是否Dispose()不知道

using (Connection conn = new Connection()) {...} // 出了块GC自动回收conn

本课目的:不是教怎么用某个框架,而是看别人怎么写,自己学会写框架,快速生成项目

       很少有人用.NET的成熟框架,但模仿他们写

 

NHibernate:看ppt,对象--->ORM框架--->数据库

       3层:Application、NHibernate、DataBase,和J2EE一样

       5对象:

              ConnectionProvider:连接工厂,实现IDbConnection,用接口调Connection的方法

SessionFactory:池

Session:带事务的Connection

Transaction:

Persistent:数据传递与保持

       为什么用实体类,不用DataSet?对象打点,是强类型;

非类型化DataSet通过["字符串"]访问时易出运行时错误

              对库的一次操作:ConnectionProvider--->SessionFactory-->Session-->Transaction

       4个dll:NHibernate.dll、log4net.dll、Iesi.Collections.dll、Castle.DynamicProxy.dll

       3环境:VS2003、VS2005、SQLServer2000

CodeSmith3.0:提供架子、接口,你去实现

.cst模板:能生成代码的文件,hibernate.org下载

自己编写cst,见SqlBuilder.cst,<%@Property name="某属性名"%>、<%=某属性名%>

导入.cst:双击“CodeSmith.exe”/“CodeSmith Explorer”/左上角文件夹按钮/

选择.cst文件所在文件夹/“确定”/

       ArrayList.cst:object老得类型转换、不方便,所以这个可以省略类型转换的麻烦

       TypedDataSet.cst:生成类型化数据集

       NHibernate.cst:生成实体类Xxx.cs、XML映射文件Xxx.hbm.xml

              指定OutputDirectory、SourceDatabase、Assembly、Namespace/“Generate”

              学***x.hbm.xml中角标属性的含义

相例WebNHibernate.WebNHibernate:注意MyConfiguration.cs

       XML文件需设为“嵌入的资源”

 

Codematic:动软,智能、可控制属性少,大工作量可以用,别依赖

把关系分析好,写代码就简单了

相例MyBookShop - Final.rar、CodematicDemo

 

SqlTransaction执行多条SQL语句:

cmd.Transaction = conn.BeginTransaction();

try {for (int i=0; i<alSqls.Count; i++) {string sql = alSqls[i].ToString();

if (sql.Trim().Length > 1)

{cmd.CommandText = sql; cmd.ExecuteNonQuery();} // 事务不是用于查询语句的

cmd.Transaction.Commit();}

catch {cmd.Transaction.RollBack();}

 

Sprint.NET:

相例FastSpring.Net.Example:VS2005写的NHibernate + NSpring

 

项目结构:

相例MyBookShop、CodematicDemo

项目数量要多、扩展要多,被问到没做过的问题起码有思路如何解决

       两堆钱,大堆面额小,但正常人反应都选大堆

 

数据库访问基础层DBUtility:abstract类、static方法,

常常叫DbHelper、SqlHelper,网上一搜就能搜到,数据提供程序只出现在这个层中

静态东西有效率,但并发多时会出问题

using (conn=new Connection()){...} // 出块自动调用conn.Dispose();conn=null;

SQL事件探查器:监控连接释放、并发访问性能等情况

接口层IDAL:约束DAL类的各种空方法

数据访问层DAL:调用数据库访问基础层中的static方法,实现接口层

       静态调DBUtility方法

工厂层DALFactory:sealed类、static方法、返回接口

反射“给我一个字符串,动态产生一个类的实例”,强转成(接口)返回,给BLL用

业务层BLL:用工厂层实例化对象,用接口接收,调用接口层中的方法

       接口调IDAL--->DAL方法

模型层Model:实体类,类<-->表,ORM,

两表之间有关系,写复合类型属性,一对多时用数组

如:class User{public UserRole[] userRole {get; set;}}

界面层UI:HTML、JS、ascx、三方控件(TreeView、AspNetPager等)

 

VS2005用类图创建复合类型很麻烦

 

 

 

优点

 

J2EE

 

.NET

 

开源

 

 

 

 

跨平台

 

 

 

 

多语言