下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、域模型设计概述一旦明确并完全掌握了系统需求后,下面就是进行需求分析及设计了。设计包括总体设计、概述设计、详细设计等很多种,本文不是讲型的设计部分。工程的,因此,直接进入域模对于面向OO 的程序设计来说,域模型的设计非常关键,当很多重复性的代码都可以用工具来生成的时候,一个好的域模型设计就显得更加关键了。由于使用的是面象驱动的设计,因此没有考虑数据库的结构等,其实你也不需要进行建数据表等操作,因为 ORM持久层框架会为你完成这些事情,你关键的是把域模型设计好。下面的领域模型分别进行介绍。对本系统中涉及到Blog 基本信息(Blog)既然是Blog 系统,最大的抽象肯定是Blog 了。因此,通过提
2、供一个Blog 类,用来Blog 的基本信息,比如领域模型类的代码:、邮箱、简介、关键字等。下面是本示例中BlogFormPO(name = Blog基本信息, disInject = id,author,password,hits) Entitypublic class Blog IdGeneratedValue(strategy = GenerationType.TABLE)priva private private private private private private private private private private privateprivateong id;St
3、ring String String String String String String String String StringStringtitle;/blog ro;/blog简介author;/blog作者password; /blog管理;/blog;/blog联系theme;/前台使用的样式announce;/blog公告信息 header;/blog头部信息 footer;/blog尾部信息 keywords;/blog关键字eger hits = 0;/总次数/省略getter及setter方法由于打算把该Blog 的配置持久化到数据库中,因此用Entity把他标记为一个可
4、持久化的实体,另外给他添加了一个类型为 Long 的id 属性,并使用Id 把其标识为主键、使用GeneratedValue得跨数据库会更加方便。指定主键生成的策略使用GenerationType.TABLE,这样会使FormPO用来表示该域对象的名称以及哪些属性可以通过外部直接注入等,名称在验证或代码生成中会用到,而disInject 对于确保数据的安全性方面非常实用。Blog 这个类跟大多数的实体类一样,就是一个非常简单的JavaBean,包含一个无参构造函数、包含属性、包含setter 及getter 方法,这里没有让他做的功能。当然,从更OO 的角度来看,你也许会觉得Blog 应该包含
5、一样像下面这样的属性:priva这样ist topics;/Blog 的所有日志就可以用下面的代码通过一个Blog 对象直接得到Blog 中的所有日志信息:blog.getTopics();同样的道理还要包含其它属性,比如他的所有、所有分类、所有用户等等。需不需要这样做,用们的话说这涉及到一个对象的粒度问题;在本示例中出于性能及简化领域模型的考虑,所以没有建立更复杂的模型关联,具体那。式好还请大家日志分类(TopicCategory)日志分类主要用于对日志进行分类管理的,由于需要管理日志分类,因此把日志分类设计成了域模型。虽然需求只要求对日志进行简单的分类,但我发现分类更应该是一个无限级的树状
6、结构。日志分类TopicCategory 域模型的代码如下:FormPO(name = 文章分类, disInject = id,topics,children) Entitypublic class TopicCategory IdGeneratedValue(strategy = GenerationType.TABLE)privaong id;Field(name = 文章分类, validator = Validator(name = string, required = true)private String name;Column(length=1000)private Strin
7、gro;POLoad(name=parentId) ManyToOneprivate TopicCategory parent;OneToMany(mappedBy=parent)privaist children = newjava.util.ArrayList();OneToMany(mappedBy=category)priva publicist topics = new java.util.ArrayList();TopicCategory()publicTopicCategory(Long id,String name,Stringro)this.id=id;=n
8、ame;this.ro=ro;/getter 及 setter 方法在日志分类模型中,由于分类是树状的,所以其中有一个 parent 属性用于指向该目录的父级分类,而使用children 属性来表示该分类的子分类。一个分类只有一个父节点,因此 parent 的类型仍然是 TopicCategory,并且使用ManyToOne 来进行标注,而一个分类有可能有多个子节点,因此其类型为 List表示分类集合,使用OneToMany来标注;parent 与 children 之间是双向的关联的,因此在OneToMany 中包含了一个 mappedBy 的属性,指明关联的一方是 parent。另外一个分
9、类下包含多个日志,所以还有一个类型为 List的 topics 属性,由于 TopicCategory 与 Topic 是双向关联的,分类与日志是一对多,所以使用OneToManycategory 属性进行关联。来标注,并且指明 topics 属性与 Topic 模型的其它还要注意的是,提供了两个构造函数,一个是默认构造子,这个是 JPA 实体必须的。另外还有一个包含 id,name 及ro 三个参数的构造子,这用于让快速构造一个简单的分类对象,在后面的程序中会使用到。在 parent 属性上,还有一个POLoad,该表示该属性值可以直接通过 EasyJWeb的 toPo 直接根据 id 进行
10、赋值,不用在程序中调用 setParent 方法赋值,这些会让后的编程中省非常多的事情。在以日志(Topic)日志是Blog 的系统的部分,这里作为示例其模型还是比较简单的。下面先来看Topic 的领域模型代码:FormPO(name = 文章, disInject = Entitypublic class Topic IdGeneratedValue(strategy = GenerationType.TABLE)ments,inputTime,readTimes)privaong id;Field(name=标题 ,validator=Validator(name=string,value
11、=min:2;max:100,required=true)private Lob privateprivateStringtitle;StringStringcontent;ro;POLoad ManyToOneprivate TopicCategory category;OneToMany(mappedBy= topic)ment comments = newnewment();privaistjava.util.ArrayListprivate Date inputTime = new Date();privateeger readTimes = 0;/getter 及setter 方法在
12、Topic 模型中,使用category 属性来指定该日志所属的分类,他与日志分类是多对一的关系,使用了ManyToOne来标记;另外日志可以包含日志评论,并且是一篇日志可以包含多条评论,所以其包含一个类型为 List的 comments 属性,用来表示日志的评论,并使用OneToMany来标注,由于该属性与日志评论模型ment 通过 topic 属性双向关联,所以在OneToMany 中还有一个 mappedBy 属性,其值为 topic。另外还要注意的是,日志内容 content 虽然也是 String 类型,但由于他可以包含比较大的数据,因此使用Lob数据库允许)都可以。另外,你还会看到在Field据的值进行验证的,其值来使得可以在一篇日志里面随便写上多少内容(只要中还包含
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智慧城市和教育资源的公平分配考核试卷
- 农业科学与农村生态农业考核试卷
- 皮革制品的竞争力分析与市场占有率考核试卷
- 港口物流的供应商选择与价值评估考核试卷
- 发动机冷间歇工况下的节能优化策略考核试卷
- 橡胶制品行业的节能减排与环保治理考核试卷
- 专业技术培训中的决策与问题解决考核试卷
- 布艺窗帘的室内空气净化功能考核试卷
- 2023年中考化学复习专项突破:常见的酸碱盐
- DB11T 931.3-2012 户用分类垃圾桶(袋)技术规范 第3部分:垃圾袋
- 供应室护理责任组长竞聘
- 高中数学教师的专业发展路径
- LTC与铁三角从线索到回款
- 《旅游市场营销》课程教学设计
- 护理质量安全与风险管理的案例分析
- 工程流体力学课后习题答案-(杜广生)
- 小儿健脾胃知识讲座
- 【比亚迪新能源汽车企业财务风险识别与控制分析13000字(论文)】
- 小细胞肺癌查房
- 外研社英语五年级上册期中期末复习要点
- 《新中国的科技成就》
评论
0/150
提交评论