微型项目实践(3):实体代码的生成
2008-05-10 13:09
239 查看
上两篇我们已经有了一个XML,并且根据这个XML生成了数据库,这次我们来看一下如何从这个XML得到初步的实体类。还是那个XML:
修改上用于生成数据库脚本的那个单元测试,加入以下代码:
仔细看上面这段代码可以发现,在生成实体代码之前我们还有一些准备工作要做:
添加DongBlog.Common类库。该类库主要包含了验证、查询的封装和诸如MD5加密、拼音首字母转换等常用的代码。具体内容可以参看代码,稍后我们会介绍一下这几个类。
添加DongBlog.Business类库。这个类库就是存放业务实体代码的地方,也就是DomainModel。里面包括所有实体类的基类(Entity)以及定义数据访问的接口(IEntityDataAccess和IDatabase),Linq使我们对于数据访问的定义得到了极大的简化。以后我们会着重分析这几个类的作用。
然后运行测试,就可以生成Blog和BlogClass这两个实体了(需要手工包含到项目中)。生成后,系统的结构和相关代码可以从右边图中看到个大概。
现在,系统的结构变得有些复杂了,我们重新调理一下:
DongBlog.Common:基础设置,包含了通用的功能,相当于对.NetFramework的扩展。
DongBlog.Business:领域模型,包含各种实体及其数据访问的定义。
DongBlog.Test:测试,负责测试和自动化脚本。
YD:工具模块,各种代码生成工具,可以跨项目复用。
以上这四个模块的依赖关系如下:
从依赖关系中可以看到,DongBlog.Common提供基础功能,被所有模块依赖;DongBlog.Business来源于需求,只依赖于Common(虽然Business是DongBlog.Test的生成的,但是不依赖于Test,这点儿比较绕);YD是独立于项目,当然不依赖任何项目中的模块;DongBlog.Test的就比较惨了,它依赖于所有的模块。这个依赖关系图我们会随着项目的进行,不断完善。
抛掉Common这个半辅助性的模块不看,我们可以发现Business的才是系统的核心,因为业务逻辑来源于需求,决定了系统的其它模块,系统剩余部分围绕业务逻辑构建。目前这个图模块比较少,还没有很好的体现出这一点,在我们加入了数据访问和UI层之后,这个依赖关系会变得更加明显。
接下来的几篇我们将会逐步介绍Common中的一些类和Entity这个核心类,以及这些类的设计思路。
本篇代码下载
1:<?xmlversion="1.0"encoding="utf-8"?>
2:<Entitiesxmlns="http://it.ouc.edu.cn/EntityDescription/V2">
3:<Entitytitle="日志"name="Blog"module="Blogs">
4:<Itemtitle="标题"name="Title"type="text"require="true"/>
5:<Itemtitle="内容"name="Content"type="longtext"require="false"/>
6:<Itemtitle="所属分类"name="BlogClass"type="entity"entityName="BlogClass"require="false"/>
7:<Itemtitle="创建时间"name="CreateDateTime"type="datetime"require="true"/>
8:<Itemtitle="更新时间"name="UpdateDateTime"type="datetime"require="true"/>
9:</Entity>
10:<Entitytitle="日志分类"name="BlogClass"module="Blogs">
11:<Itemtitle="名称"name="Name"type="text"require="true"/>
12:<Itemtitle="描述"name="Description"type="text"require="false"/>
13:</Entity>
14:</Entities>
修改上用于生成数据库脚本的那个单元测试,加入以下代码:
1:///<summary>
2:///构造实体代码
3:///</summary>
4:[TestMethod,Description("构造实体代码")]
5:publicvoidUtil_CreateEntityCodes()
6:{
7:varentities=getEntities();
8:varbaseSpace="DongBlog.Business";
9:varusingNameSpace=newstring[]{"DongBlog.Common"};
10:varpath=Gobal.SolutionPath+@"/DongBlog.Business";
11:
12:newLinqEntityCodeGenerater().Generate(path,baseSpace,entities,usingNameSpace,false);
13:}
仔细看上面这段代码可以发现,在生成实体代码之前我们还有一些准备工作要做:
添加DongBlog.Common类库。该类库主要包含了验证、查询的封装和诸如MD5加密、拼音首字母转换等常用的代码。具体内容可以参看代码,稍后我们会介绍一下这几个类。
添加DongBlog.Business类库。这个类库就是存放业务实体代码的地方,也就是DomainModel。里面包括所有实体类的基类(Entity)以及定义数据访问的接口(IEntityDataAccess和IDatabase),Linq使我们对于数据访问的定义得到了极大的简化。以后我们会着重分析这几个类的作用。
然后运行测试,就可以生成Blog和BlogClass这两个实体了(需要手工包含到项目中)。生成后,系统的结构和相关代码可以从右边图中看到个大概。
现在,系统的结构变得有些复杂了,我们重新调理一下:
DongBlog.Common:基础设置,包含了通用的功能,相当于对.NetFramework的扩展。
DongBlog.Business:领域模型,包含各种实体及其数据访问的定义。
DongBlog.Test:测试,负责测试和自动化脚本。
YD:工具模块,各种代码生成工具,可以跨项目复用。
以上这四个模块的依赖关系如下:
从依赖关系中可以看到,DongBlog.Common提供基础功能,被所有模块依赖;DongBlog.Business来源于需求,只依赖于Common(虽然Business是DongBlog.Test的生成的,但是不依赖于Test,这点儿比较绕);YD是独立于项目,当然不依赖任何项目中的模块;DongBlog.Test的就比较惨了,它依赖于所有的模块。这个依赖关系图我们会随着项目的进行,不断完善。
抛掉Common这个半辅助性的模块不看,我们可以发现Business的才是系统的核心,因为业务逻辑来源于需求,决定了系统的其它模块,系统剩余部分围绕业务逻辑构建。目前这个图模块比较少,还没有很好的体现出这一点,在我们加入了数据访问和UI层之后,这个依赖关系会变得更加明显。
接下来的几篇我们将会逐步介绍Common中的一些类和Entity这个核心类,以及这些类的设计思路。
相关文章推荐
- 微型项目实践(3):实体代码的生成
- 微型项目实践(6):Business层代码分析——实体类的生成策略
- 微型项目实践(5):Business层代码分析——实体基类
- 微型项目实践(5):Business层代码分析——实体基类
- 微型项目实践(2):用测试驱动代码生成
- 微型项目实践(6):Business层代码分析——实体类的生成策略
- 微型项目实践(2):用测试驱动代码生成
- 微型项目实践(4):Common层代码分析
- 微型项目实践(1):用XML描述实体
- 微型项目实践(4):Common层代码分析
- 图解CodeSmith使用和实用教程一 - 入门和生成MIS项目实体层代码
- 微型项目实践(1):用XML描述实体
- Maven Web项目使用MyBatis_Generator_1.3.1自动生成javabean,dao,mapper.xml代码
- 项目收集-AutoMapper使用,事务,Json.Net序列化反序列化,代码生成调用等
- 微型项目实践(7):数据访问的定义
- 《Python编程快速上手》6.7实践项目代码
- 遇到的问题-----网上下载的项目修改代码无效,不能相应的生成相应的页面内容
- 生成实体层的界面(webForm1.aspx)代码
- MVC 5 Scaffolding多层架构代码生成向导开源项目
- Code Swarm生成可视化项目代码贡献视频