分层设计的软件系统,由于把相似功能的类或组件放在同一层里。所以好的分层系统应该具备:层的内部“高内聚”,层与层之间是“松耦合”的。只有符合这样的一个设计原则的软件系统,才能具有可复用性和可扩展性。因此,降低层间“耦合度”就成软件设计的目标,能够设计出“松耦合”的系统,就意味着我们的系统具备可复用性和可扩展性,这样的系统就能够满足的用户不断变化的需求。从设计角度我们可以将一个应用系统(一般是信息系统)分成四层结构如图所示。接下来我们将一一介绍各层之间的含义。
表示层
表示层是用户与系统交互的组件集合,用户通过这一层向系统提交请求或发出指令,系统通过这一层接收用户请求或指令,然后,根据请求指令调用服务层,再根据调用的结果,将相应的内容展现到表示层。表示层应该是轻薄的,不应该具有业务逻辑。如果我们的系统是一个Web系统的话,我们采用的技术有HTML、JSP和Servlet等,也可以使用MVC框架,例如Struts等框架技术。这时我们将表示层称为Web层更准确一点。无论采用什么技术表示层都应该是轻薄的,不应该具有业务逻辑。也就是说无论我们使用JSP、Servlet作为表示层还是使用Swing作为表示层都应该是轻薄的。
服务层
服务层是系统的核心业务处理层,负责接收表示层的指令和数据,根据业务逻辑的需要调用相应的持久层,并将结果返回给表示层。为了降低表示层和服务层的耦合问题,我们会在两层之间引入接口,然后在运行期注入依赖关系。服务层一般使用的技术有会话EJB、消息EJB和JavaBean。
数据持久层
数据持久层用于访问数据库,数据持久层中一般是通过DAO(数据访问对象设计模式)访问数据库的,也是为了降低耦合度,DAO被设计为接口,DAO实现可以是JDBC,也可以使用一些ORM框架如Hibernate等。除了使用DAO以外,我们也可以使用EJB中的实体EJB实现数据持久化。
EIS层
EIS层即企业信息系统层,是系统的数据来源层。它们可以是数据库、文件和其它的系统,多数情况下是指的是数据库。