TimeTracker是微软一个比较简单的案例,这几天决定重新学一下asp.net,就从这些官方的案例开始入手研究。
数据库:
TimeTracker 是个简单的案例,主要的关系以及数据表如下图:
这里membership的关系表只显示了一张users表,因为这张表和这个系统关系比较紧密。
数据表不是很复杂,这里就不详细说了。
DAL:
TimeTracker虽然是个很小的案例,但是分层却一点也不含糊,照样有数据层,逻辑层,表现层,其中DAL里面有三个类:DataAccessHelpsers类,DataAccess类,SQLDataAccessLayer类,DataAccess是个抽象类,包含了该项目要实现的所有的数据操作类的抽象方法,SQLDataAccessLayer是继承与DataAccess类的在SqlServer上的具体实现,DataAccessHelper类是个工厂,在Web.config里面有个具体实现类的配置:
<add key="aspnet_staterKits_TimeTracker_DataAccessLayerType" value="ASPNET.StarterKit.DataAccessLayer.SQLDataAccess"/>
DataAccessHelper根据aspnet_staterKits_TimeTracker_DataAccessLayerType的值,生成具体的数据操作方法,其实这已经有点类似于petshop里面的provider模式了,只是这里实现的更简单了而已。
插一句,关于web.config文件,这个项目其实也挺值得学习的,比如:
<location path="login.aspx">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
这一段是定义login.aspx页面运行所有人访问。
<pages maintainScrollPositionOnPostBack="True" /> 这里定义了页面在postback以后滚动条滚动到之前的位置,这个特别有用,记得在以前要实现这个功能好像是挺花力气的。
BLL:
BLL里面的类直接把DomainModel和相关的逻辑都放在一起了,比如Category类,除了定义Category的字段,属性,还有它的实体方法和静态方法。这里的方法调用了数据层的时候用一下类似的方法:
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
return (DALLayer.GetAllCategories());
体现了设计原则里面的依赖抽象而不依赖具体实现的原则。
TimerTracker:
这个文件夹里就是具体的表现层了。
Global文件在程序开始的时候就判断角色系统,如果没有系统需要的角色就直接创建了角色。
关于用户的创建修改检索登陆就不说了,看一下教程,说的非常详细。
母版页里面放了一个Menu控件,之前没想到Menu控件能实现菜单这么好看,下次做菜单的时候看一下这个实现好了,不用自己写菜单代码了。
其他的页面代码里面主要就是数据控件 GridView,DataList,Repeater以及ObjectDataSource控件以及验证控件的使用了。另外,那个日历页面觉得好像做的不是很好,如果要在实际项目里面需要这个功能的话强烈推荐my97这个控件。