收到一个朋友blog的系统升级的要求很久了,一直没有动手。现在觉得是应该做做了,否则真的都不好意思面对了。
本着就在原系统的基础上升级的原则,那么我所要作的,就是尽量减少朋友的部署成本和我的开发成本。
因此,本单用户blog系统本身对你或者没有任何帮助,我只是尽力把自己觉得涉猎的技术都引入到这个系统中来。也当自己练习练习。毕竟好久都没有做整套的东西!
想把一个东西,按照系统化的东西,按照程序去做出来,还是需要时间和精力的。所以,这讲是一个系列的随笔。
因此,本周的开始的任务,必定还是用户需求的收集。这个我想每个人每个系统都有自己的特点,因此这个就省略。因为对于我,我只需要从前台往后台一步步完成即可。
因为,对于这个小系统,架构的设计,以及在这次的实施的过程中,对以后的个人知识系统的完善和个人工具的完善,才是我最关注的.
开发环境:Windows XP + .Net Framework2.0 + Visual Studio 2008 + IIS5.1 + Access + Visio
架构设计:
典型的三层架构。我只是自己在加了一个common层,用来放类的定义和一些通用的接口之类。当然这个层的东西,都是要跨层使用的。对于web部分,我还是要在app_code下建立一个针对web的通用的方法或者类。本来还是应该再加一个测试的层的,可惜的是,我对测试不熟悉,即使2008已经加入了很方便的功能,就目前来说,我个人还是不喜欢测试,这个可能算是目前已知的一个遗憾吧。还有应该就是后续的层了,那就是加入一个WebServices的层,提供相应的服务
我的过程是:
在Common层,先完成一个类的定义。
在DataAccess层,完成相应的DataAccess中的类。这个类主要与数据库打交道完成以下任务
以Category为例
---SELECT---
GetCategories
GetCategoryById
GatCategoryByName
---ADD---
AddCategory
---UPDATE---
UpdateCategoryById
UpdateCategoryByName
---DELETE---
DeleteCategoryById
DeleteCategoryByName
当然,本身由于blog系统的数据库类型已经为Access,所以自己建立一个AccessHelper这个类是必定的。这个类的作用是干啥,以及需要写什么东西,我觉得就不要罗嗦了。参照微软的Application Block或者Enterprise Library去写一个同样的东西就行了。
在BizLogic层。把DataAccess层过来的数据,转换为相应的对象
比如:
GetCategories ---> List<Category> GetCategories
GetCategoryById ---> Categroy GetCategory
最后,在Web这个层。
你知需要和对象打交道了。要什么就抓什么好了。
本层要设计的的技术的应用:asp.net theme, asp.net master page, asp.net webparts, ajax, 静态化htm,UrlRewrite, Img的Handler, 很多很多
-----------------当你写完一个类的时候,你要是再想写的时候,是不是觉得自己需要做很多重复工作啊,这个时候,代码生成需要派上用场了。因为,建立一个自己的代码生成工具,很有必要的。这个才是今天这篇post的主题。
代码生成工具:Access2Objects
功能描述:
1 根据链接字符串,获取所以表对象
2 根据表,生成相应的类
3 为每个类,生成DataAccess, BizLogic代码
目前就这样,这个小程序,争取拿一周的时间来完成。
相关知识:
1 使用Ado.net获取数据库架构信息:Access数据库架构信息的获取也可以通过下面的方法来完成
2{
3 OleDbConnection myConn = new OleDbConnection(connString);
4 myConn.Open();
5 DataTable table1 = myConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,null);
6 myConn.Close();
7 return table1;
8}
2 从表去获取表的详细信息,你可以根据上面的这个table中的数据来,也可以通过DataReader来推断
2myConn.Open();
3OleDbDataReader dataReader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);
4table1 = dataReader.GetSchemaTable();
5dataReader.Close();
3 。。。暂时想到这里了。。。