Architecture

记录一些关于Linux服务器管理和系统架构方方面的信息。

拍拍程序架构

程序架构

大家都听过系统架构,软件架构,程序也要架构吗?

当然需求,我们不是常说“三层架构”吗?表现层,业务层,数据层。只有充分理解了三层架构的含义,才能更好的和其它人一起开发,使组内成员达成一致,能使程序路径清晰,明确任务分工和协作人员,提高了开发效率。

在此之前还想解释一个名词,程序设计

程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。

所以,我想把程序架构解释成:对整个代码结构和规范的一个蓝图,有待补充

下面是我做的拍拍项目的程序架构,由Raymond主持的项目,当时我是等Raymond架构好了业务层和数据层后加入项目的。也正是由于良好的程序架构,使得我很快的熟悉了代码,很容易的就理解了思想和需求,这不是就把方法的注释写到方法名里,把产品的需求写到程序架构里吗?

拍拍程序架构

其实这个规范主要是遵循了一个达成共识,会让大多数人习惯。

表示层:按页面来分,比如:上传控制器,组图列表控制器。

业务层:按业务的需求来分,比如:图片管理器(组图,单图),用户管理器(用户信息,用户权限)。

数据层:这个是最好分的了,一般也不会有什么大的标新立异,直接和表一一对应。

所以说,经历了这个项目,培养了一种思维方式。

什么是反向代理

Reverse Proxy 反向代理
反向代理指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。

根据Spring注释确定包命名规则

包的命名规则很多,说法也很多,但再怎么变也脱离不了三层架构这一说法,至少目前可以这么说。
在说新的规则之前,先说下我熟悉的老的命名规则。
表现层命名为:com.iguoer.web
如果使用Struts的话,会命名为:com.iguoer.web.action
如果使用Spring MVC的话,会命名为:com.iguoer.web.controller

业务层一般命名有两种
com.iguoer.service 和 com.iguoer.business

数据层一般命名为:com.iguoer.dao
使用hibernate的话,就有com.iguoer.dao.hibernate
根据有些解释三层架构的图上说,穿越三层的是一个叫domain域的东西,所以就有了
com.iguoer.domain
实体被称为持久化对象
所以有了com.iguoer.domain.po
组装后给页面有值对象,所以有了com.iguoer.domain.vo

一般工具类被放在com.iguoer.util中
应用程序放在com.iguoer.app中

我现在根据Spring的注释,重新写一个包的命名,当然这首先建立在你对三层架构的熟悉上。

com.iguoer.app        应用程序
com.iguoer.combo        组合对象,传给页面,相当于com.iguoer.domain.vo
com.iguoer.controller        MVC中的控制,Spring的注释@controller
com.iguoer.controller.admin        管理员表现层
com.iguoer.controller.filter        表现层的过滤器
com.iguoer.entity        实体,相当于com.iguoer.domain.po Spring的注释@entity
com.iguoer.repository        储藏室,相当于数据层,类似com.iguoer.dao Spring的注释@repository
com.iguoer.security        保密包,说明这里的东西尤为重要
com.iguoer.service        业务层,服务层,相当于com.iguoer.business Spring的注释@service
com.iguoer.util        工具类

注:上面所说的表现层,其实指的只是MVC设计模式中的控制

XX的优点

  1. 异步消息机制处理用户动态
  2. 点击数用日志统计
  3. Squid+Memcached缓存机制(及时刷新)
  4. 读写分离(*)
  5. 索引文件伪静态实现半动态化(延时刷新)
  6. 使用Javascript框架(jQuery)实现页面效果
  7. 目录采用树形结构(树路径)-自定义目录
  8. 容许一定数据的冗余(不能是排序或搜索数据)。

Spring Community Downloads