1.刚参加工作:能解决
问题.完成项目.
架构(三层)
单人完成
(网店)
(OA)
2.
工作2年以后:团队开发(分工明确)
架构
设计
管理
沟通
版本控制
===============================================
项目是怎么完成的?
1.需求
2.分析&;设计
2.1数据分析 ER图
2.2业务分析
2.3数据设计 物理建模
2.4系统设计 (UML和
设计模式)
3.架构
4.编码 (C#+SQL+ASP.NET+ADO.
NET+
HTML+
Javascript+CSS)
5.测试
=====================第二天
三层架构
UI表示(现)层 ==> 业务逻辑层 ==> 数据访问层
缺点:代码更多,工作量更大,
系统比较复杂.(最好是精通设计思想,如设计模式),运行效率低
优点:高可拓展性,可维护性高
建议使用代码工具:根据数据库表结构,自动生成对应的N层代码(OR Mapping)
N层架构:
在三层的基础上扩展出其他的层
三层架构是一种思想
1ERP
ERP.Web
OA
7 OA.Web
6 OA.BLL
5 OA.DALFactory
3 OA.IDAL
2 OA.Entity
4 OA.DALSqlProvider
HR
HR.Web
HR.BLL
HR.DAL
.....
Membership
System.Web.Security.Membership.Providers[string name] 已经实现了Membership的Factory
System.Web.Security.MembershipProvider :就是接口,成员管理的接口
System.Web.Security.SqlMembershipProvider:是基于SQL的System.Web.Security.MembershipProvider的具体实现
OtherMembershipProvider:System.Web.Security.MembershipProvider的另一种具体实现(与原来的老系统兼容)
OR Mapping:
1.根据表生成类(实体类)
2.根据表的主外键关系生成对应的一对多(父->多个子)的方法和多对一(一个子,找一个父)的方法
IDAL 里有 N个具体接口
一个具体的DAL实现的程序集DLL里有N个接口具体的实现
数据访问层和业务层之间应用抽象工厂模式
有N个产品(IDAL里的个N个表的数据访问接口)
目前有2个系列:Oracle,SqlServer
抽象工厂规定每个系列的工厂,必须提供N个接口的实现
Sql下N个SqlXXXProvider
Oracle下N个OracleXXXProvider
对于唯一的数据访问的提供程序:全局只需要实例化一次
使用"单例模式"singleton
业务层调用数据层,应用数据提供程序单例
反射获得数据提供
程序工厂及使用缓存提高效率
代码生成
研究他人的缓存实现
反编译工具
他人的数据访问工厂的实现
使用codesmith生成实体层代码
自带的NetTier架构生成和分析
写模板生成实体层代码
中文 在
sql中 变 safename
根据模板生成的结果保存到各自文件
NetTier
可以直接使用
如果已经现成的架构,反向根据codesmith来生成我们自己的代码
流行的数据访问层框架
Data Access Application Block
entlib 4.1
SubSonic
Nhibernate
TypedDataSet
Entity Framework(3.5 sp1)
DataService (3.5 sp1)
........
下次上课:
用codesmith+entli
b4.1 实现我们的数据层
本次
作业:
1.搭建N层架构(独立完成)
2.使用codesmith实现自己的模板并生成代码文件(实体层,工厂,产品)
=======================第三天结束
代码生成工具与架构的关系
架构解决代码组织,重用,扩展
生成工具只是一个工具,用来生成代码.生成什么样的代码?根据某种架构.
个人开发的生成工具,与它的架构绑定了.==>并不是真的生成工具(能定义自己的模板)
用codesmith+entlib4.1 实现我们的数据层
从上向下,应该做什么了?
ui->biz->data
要保持我们自己的架构设计,也要最大程度的利用现有的数据访问架构和代码生成工具
可以现在就去做的:
生成Biz代码
使用Codesmith
表,所有列,主键列
从表找主表 ==>当前表,找到外键=>外键所在的表(主表)
主表找从表 当前表的主键,出在现哪些表的外键中(是不是有提供)
生成IDAL代码
增删改查
从表找主表(LoadByID)
主表找从表
DALFactory增加属性模板调整
具体数据访问工厂代码