- 论坛徽章:
- 0
|
连续几个问题,大家都来看看?
数据一般是存放在数据库里的,java 要对他进行处理首先要把它从数据库中
读到 object 中,因此系统中最好有一个永久对象层来处理这个。
这样系统就成了多层结构
界面(web 或者 gui 界面)
-------------
业务层
-------------
永久对象层
-------------
数据库,文件系统
在永久对象层里 j2ee blue print 中推荐使用 DAO 对象存取数据库
比如:
开发一个论坛,帖子的信息存放在数据库里:
article表
---------
id
title
content
date
author
board
---------
系统中在永久对象层对帖子的处理需要有两个类:Article 和 ArticleDAO
Article 是帖子对象,只有帖子的数据,和 get, set 方法,就是一个简单的 bean
- class Article{
- int id;
- String title;
- String content;
- String date;
- int author;
- int board
- // getter, setter
- ...
- }
复制代码
ArticleDAO 是用于与数据库交互来存取,查找帖子的方法的集合,这只是一个接口
- interface ArticleDAO{
- public Article getArticle(int id); // 取某个 article
- public Collection getArticleByBoard(int board); // 取某个版块的所有 article
- public Collection findArticleByTitle(String title); // 查找帖子
- public Collection findArticleByContent(String content);
- public void addArticle(Article article); // 添加帖子
- public void delArticle(int id); // 删除帖子
- public void modifyArticle(Article article); // 修改帖子
- }
复制代码
ArticleDAO 的具体实现根据具体实现
- class ArticleDAOMysql implements ArticleDAO{
- // 针对 mysql 数据库实现 ArticleDAO 里的所有方法
- }
复制代码
永久对象层对业务层的接口是 ArticleDAO,传给业务层的数据是 Article
业务层并不需要了解 ArticleDAO 的具体实现(ArticleDAOMysql)是 mysql 还是 oracle
将来如果把系统从 mysql 迁移到 oracle,系统只需增加一个 ArticleDAOOracle 类即可
业务层无需做改变
系统设计最好能分层,模块化,模块对外之应该公开一个简单的接口,而不需要也不能公开自己
内部的具体实现,模块间通讯只是通过这些接口来调用,这样才能实现系统的松耦合,如果你不
想让调用你的类的人了解这个类的细节,不想让类的实现的变动影响到系统的其他部分,就要使
用接口。
去看看 《设计模式》 这本书,第一章就讲到了要针对接口进行设计,不要针对实现进行设计。
:) |
|