框架、项目结构
2009-02-08 12:37 宝宝合凤凰 阅读(560) 评论(0) 收藏 举报框架、项目结构 2008-11-26 12:52
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 | 
| 
 开源 | 
 √ | 
 
 | 
| 
 跨平台 | 
 √ | 
 
 | 
| 
 多语言 | 
 
 | 
 √ | 
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号