冬Blog

醉心技术、醉心生活
posts - 88, comments - 674, trackbacks - 9, articles - 1
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理

微型项目实践(1):用XML描述实体

Posted on 2008-05-02 20:42 冬冬 阅读(3242) 评论(19)  编辑 收藏 所属分类: .Net & C#Web DevelopArchitecture

系统设计的第一步当然是分析需求,目前能够想到的就是对日志的管理,恩……再加上一个分类好了,大体就是这样子:

image

我们使用一个XML来描述这两个实体:

   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <Entities xmlns="http://it.ouc.edu.cn/EntityDescription/V2">
   3:    <Entity title="日志" name="Blog" module="Blogs">
   4:      <Item title="标题" name="Title" type="text" require="true"/>
   5:      <Item title="内容" name="Content" type="longtext" require="false"/>
   6:      <Item title="所属分类" name="BlogClass" type="entity" entityName="BlogClass" require="false"/>
   7:      <Item title="创建时间" name="CreateDateTime" type="datetime" require="true"/>
   8:      <Item title="更新时间" name="UpdateDateTime" type="datetime" require="true"/>
   9:    </Entity>
  10:    <Entity title="日志分类" name="BlogClass" module="Blogs">
  11:      <Item title="名称" name="Name" type="text" require="true"/>
  12:      <Item title="描述" name="Description" type="text" require="false"/>
  13:    </Entity>
  14:  </Entities>

这个XML很容易看懂,它的Schema定义在“http://it.ouc.edu.cn/EntityDescription/V2”中,根节点表示这个XML定义的是实体的集合(Entities)。每一个实体包含很多数据字段,字段有标题、名称、类型等属性,需要注意的是,这里的数据字段不表示数据库设计,也不表示类的设计,只是实体的业务逻辑定义。

使用XML描述业务数据有很多好处:

  1. 是与具体实现无关。正如前面说的,该XML描述的是业务实体,不是数据库表,也不是C#类,所以它是与具体实现无关的。我们需要的仅仅是描述系统的业务逻辑所包含的数据有哪些,以及他们的相互关系是什么。所以这种描述方法甚至可以推广到其它平台。
  2. 无二意性的。与需求文档不同,XML描述的定义是精确的,不会因为措辞的不同造成人们不同的理解。
  3. 是可以被版本控制的。XML是纯文本的,它被包含在项目的Solution中,当然会被版本控制工具一并捕获。版本控制的好处在于不同的版本的代码对应不同阶段的业务需求,这直接表示为不同的数据库设计,因此避免了团队成员修改了数据库而其它成员的代码不能运行的问题。
  4. 使项目自动化。有了描述实体的XML能干什么?很多:生成数据库的建库脚本,生成实体C#类,生成测试数据,甚至可以用于生成文档和项目手册!这可以大大提高系统的开发效率,规模越大的系统,自动化的优势越明显!
  5. 是同步的。文档的更新与同步经常成为一个令人头疼的问题。而这个XML因为是系统框架自动化的依据,所以修改系统需求和设计时,这个XML是被同步修改的,所以这个文档总是可以被作为了解系统设计的最新资料。
  6. 与客户交流的工具。就我的经验来看,大部分客户其实是想了解系统设计的,这样让他们更有安全感,也使项目的设计更符合需求。但是,数据库设计通常包含了太多的实现细节,不适合直接展示给客户,代码就跟不用说了,而这种纯粹描述业务的XML则非常合适。当然,一定的讲解是必须的,但剩下的写文档的工作。:)

因为以上这些优势,所以我总是以这个XML作为项目的起点。当然,XML的格式也可以根据项目的不同,略做修改。

当然,这个东西有些简单了,但是随着开发的进一步的进行,我们的实体数据也会逐渐增加,而增量开发、应对变化是系统设计中要解决的重要问题!实际项目的XML最终会非常复杂,这里有一个实际项目的实体XML文件,供大家参考。

当前项目的代码从这里下载。其中YD(我的名字的所写,呵呵)类库是我常用的一些代码,主要就是基于XML的代码生成器以及XML的Schema(有了它,VS.Net 2008就可以在编辑XML时启动智能感知,非常方便。)本文先到这里,下一篇中,我们来看这个XML的具体用法。

Feedback

#1楼    回复  引用  查看    

2008-05-02 21:08 by Indigo Dai      
XML代码段是啥字体呢?

#2楼 [楼主]   回复  引用  查看    

2008-05-02 21:12 by 冬冬      
@Indigo Dai
Live Writer的插件“Insert Code”。

#3楼    回复  引用  查看    

2008-05-02 21:24 by nfa2dfa      
这算什么,小学生作业么?

#4楼 [楼主]   回复  引用  查看    

2008-05-02 21:27 by 冬冬      
@nfa2dfa
呃……愿闻您的高见。
如果您的看法是项目规模过小的话,我可以解释一下,因为想让大家更容易理解,而且项目是增量开发的,不是一下就考虑全的(我们很敏捷,对不?)
可以给您一个大大的XML参看,是我现在做的项目用的,如果您需要的话。

#5楼    回复  引用  查看    

2008-05-02 22:21 by Justin      
可否提供这本书的下载呀
或者那不是一本实际存在的书?

#6楼 [楼主]   回复  引用  查看    

2008-05-03 09:03 by 冬冬      
@Justin
呵呵,这不是本书,我恶搞了一下乐思红皮书的封面:)

#7楼    回复  引用  查看    

2008-05-03 10:51 by 狼Robot      
顶一个,呵呵.

--引用--------------------------------------------------
附件是当前项目的代码,其中YD(我的名字的所写,呵呵)
--------------------------------------------------------

楼主名字缩写有歧义......

#8楼 [楼主]   回复  引用  查看    

2008-05-03 10:59 by 冬冬      
@狼Robot
关于“YD”的问题……我困扰很久了,兄弟知道就可以了,不要说出来嘛~~~

#9楼    回复  引用  查看    

2008-05-03 12:35 by 簡簡單單..      
Mark

#10楼    回复  引用  查看    

2008-05-03 14:17 by 狼Robot      

#11楼    回复  引用  查看    

2008-05-05 11:07 by 镜涛      
缩写有歧义?昂....IT讨论YD!呵呵

#12楼    回复  引用  查看    

2008-05-06 15:32 by WGforward      
学习中~~~~~~~~~~

#13楼    回复  引用  查看    

2008-05-09 08:53 by hydra [未注册用户]
为啥字段类型只有整形没有浮点?

#14楼 [楼主]   回复  引用  查看    

2008-05-09 09:08 by 冬冬      
@hydra
没有float?呃……难道是我忘了?
不过我确实太不用Float,主要是处于精度的考虑。一般是定义最小单位的整形,模拟float。

#15楼    回复  引用  查看    

2008-05-09 13:20 by hydra [未注册用户]
晕,楼主太强大

#16楼    回复  引用  查看    

2008-05-21 15:27 by guest [未注册用户]
我很关心的问题,用实体描述数据库中得表,如果是大项目,相比数据库中表的数量肯定很多,这样的话如果依照上面的方法,将有一个非常大的文件.现在的问题是:1.有什么办法可以让这个文件发布"瘦"身.2.如何防止被改动,因为一但该动,对应的实体类也应该改动,不然肯定会出问题.

#17楼 [楼主]   回复  引用  查看    

2008-05-21 15:33 by 冬冬      
@guest
呵呵,很有意思的问题,不过我的这个办法是针对“微型项目”的,文章的名称叫“微型项目实践”不是?:)

对于大项目,我的建议是——划分成小项目来做。

对该XML的瘦身我没考虑过,但是可以考虑针对这种方式开发一些自动化工具,比如多个XML的自动合并一类的,这样就可以把整个XML分成N个小XML。

防止修改,我认为是软件工程或者项目管理要解决的问题,带有权限系统的版本控制可能会有帮助。

#18楼    回复  引用  查看    

2008-06-06 12:10 by andy。huang [未注册用户]
朋友,没有应用实例哦,是否在代码中提供

#19楼 [楼主]   回复  引用  查看    

2008-06-06 14:21 by 冬冬      
@andy。huang
恩,在代码里。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-04 21:56 编辑过
 
另存  打印
最新IT新闻:
· 微软高管:Wii用户最终会成为Xbox 360用户
· 遵守YouTube案裁定 谷歌将陷入隐私指控深渊
· iPhone入华在即 中国手机产业生存面临考验
· 阿里巴巴集团再向淘宝注资20亿元
· 56被关一月 危机的是整个视频业