请选择 进入手机版 | 继续访问电脑版

Java六期电商项目总结展示

发表于 2016-11-30 20:48 显示全部楼层 18 2361

Java学院经过3个班级的测试,新增的电商项目趋于完善,该电商项目的需求是根据国内某家大型的在线电商平台的需求规划的,为了锻炼同学们的团队开发能力和自我项目开发能力,这个项目在8天时间之内,同学们分组完全自己完成,老师仅仅只是给出了一个基础的项目架构;从需求文档阅读,分析,建模,到逻辑完成,前端开发,到需求分配,项目进度把控,完全由各个小组协作完成,通过这个项目,同学们都有非常非常大的收获,下面我们来看看一个小组组长的项目总结:


电商是我们做的第四个项目,也是我作为组长的第二个项目,相比上一个微信项目,个人感觉分配工作更明确一些,但还是有很多不足,比如督促组员完成相应的工作,以及怎样更好的协调组员之间的工作,这些都是我需要加强的。

接下来我对这几天做的模块进行简单的介绍;

商品管理模块

1、商品列表

商品的属性较多,主要分为4块,基本属性:代表一个商品的基本信息

商品分类属性,就是指这个商品所在分类上面的分类属性值

详细描述,代表商品的详细描述页面内容

商品相册,就是商品的图片管理

2、商品的增删改查

3、商品的图片上传 (难点)

  1)这里主要涉及到多个图片上传同时保存时区分图片,以及排序和首页

  2)思路:利用全局变量实现该功能

        ①当触发文件上传时,将该图片对应值保存到全局变量中

②当文件上传之后,根据全局变量中的值给指定的img回显上传的图片

SKU:

Sku难度来说,有点挑战性.首先是要先理解sku是做什么的,SKU是指一款商品,每款都有出现一个SKU,便于电商品牌识别商品。一款商品多色,则是有多个SKU,例:一件衣服,有红色、白色、蓝色,则SKU编码也不相同,如相同则会出现混淆,发错货。

还有就是表的设计,这一点最为重要,如果设计不好的话就会打打的降低工作效率,与增大工作难度.所有经过本人全方位的思考,设计出该三张表的结构(下图):

Sku主表:

      1.png

Skuproperty属性表:

    2.png

Skupropertyvalue值表:

3.png

生存sku的笛卡尔积这点非常有意思,想了一晚上想到要用到递归,可以就是难以实现,好玩的不行.最终还是看原项目的代码.

还有一大难题就是页面与js太高级了,看不懂.这一点阻碍了我开发进度.

最后来一个总结,SKU不是越多越好,如何控制SKU是门精细的功课

 

商品分类

负责商品中分类管理

分析分类: 

分类中包含字段:

4.png

 

分类属性:

5.png

 

分类属性值:

6.png

 

分析需求:


1,点击添加新属性,增加一个新的分类属性;

实现页面的跳转功能(基本的页面显示)

 

2,每一个新的分类属性包括三部分,属性名称,即该分类属性的显示名字,比如描述CPU的核心数量;

完成基本的CRUD操作;         

之中分类的控制比较繁琐,在页面中比较不好实现,

我使用了二级联动查询,

在新建一个三级分类的时候,

7.png

 

8.png

 

完成效果

之中用了ajax请求回显不会刷新页面;用windowhref 请求:也可实现此操作,不过用户体验差,每次点击会刷新页面,导致之前填的数据全部清空,

由于页面掌握技术不是很理想,所有比较慢

修改和保存时要判断session中的回显是否为空 否则会报错

描述CPU的核心数量;

3,属性类型,是一个下拉列表,有3种值,

 

1)数值,即该属性是需要在实际添加商品的时候,设置一个数字的类型值;在编辑商品的时候,显示一个文本框即可;

2)文本,即该属性是需要在实际添加商品的时候,设置一个文本值;在编辑商品的时候,显示一个文本框即可;

下拉列表,即该属性是需要在实际添加商品的时候,从多个下拉列表值中选择一个值,如果选择下拉列表,则还需要为该下拉列表添加可选的值;在属性值中的多选框中,通过添加参数值,为下拉列表添加可选的值

保存没什么难度,只是在修改时遇到了瓶颈,由于过于的复杂化并判断各种发生的情况

是否改动,是否添加一条属性,是否是保存等等

为了避免这些琐事的问题与判断,使用删除对象的分类中对象的属性和属性值,并重新保存一份到数据库中,完成伪修改,


品牌模块 

后台:开发文档中已经设计好品牌这个类了,所以我只需要根据项目的实际需要再改动一下就可以用了。品牌这个模块在项目中还是比较简单的。后台的CRUD代码已经写了很多,这里就不多说了。直接用代码生成器生成品牌相关的代码。因为商品类引用品牌的ID就可以了,所以品牌的脱离出来单独开发,不会跟商品开发有任何的冲突或依赖。

 

前台:页面方面,用的是bootstrap,个人对页面不是太熟悉,所以开发得比较慢。项目的视图层是Spring MVC + Freemark,传值还是很方便的。主要是用Freemark处理参数的格式问题。当我们传的值有是为空或NULL时的处理,就使用Freemark的命令处理

例如:

${data.args!’’} 
或
${data.args?string(‘’)}

      页面的JS代码都不是我们写的,所以要花时间去了解这些JS代码的大概作用。实际上,我在这方面花的时间比写CRUD的代码时间多很多。

 

系统日志模块

 

> 系统日志模块,可分为异常日志和操作日志。项目中因为时间关系,基本的系统日志记录功能是完成了,但没有做控制日志记录的记录点因记录精度。

 

系统日志后台:系统日志,为了能在页面显示,所以我把日志记录的信息保存到数据库中,但个人觉得日志信息一般是记录到一个文本文件中比较合理。把日志记录到文本文件中,个人觉得更简单。只要使用Log4j就可以把不同级别的日志信息保存磁盘中。

      

系统日志模块的实现,我想到两种方法:

1)使用Log4j,把日志信息保存到数据库中

2)Spring AOP ,在Service的方法前后切入,再做日志记录操作

 

第一种方式:Log4j

使用Log4j把日志信息保存到数据库,主要是在配置文件中配置相关的信息。

例如:

 

log4j.appender.appender2=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.appender2.driver=com.mysql.jdbc.Driver
log4j.appender.appender2.URL=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8
log4j.appender.appender2.user=admin
log4j.appender.appender2.password=123456
log4j.appender.appender2.sql=insert into logtable (cdate, message) VALUES ('%d{yyyy-MM-dd hh:mm:ss}', '%c %p %m %n')

 

感觉就好像写JDBC一样,把对应的信息写上就可以了。

这种方式的问题:如果要把日志信息保存到数据库中,还要把日志中不同的信息保存到不同的列中,这就比较难去控制。我暂时想到用正则表达式去把日志中的信息提取出来,前提是我们在记录日志信息的时候把信息格式做好,这样方便用正则表达式去提取信息。


第二种方式:Spring AO P 

 

在项目中使用了一个类来记录日志信息。我使用了注解的方式来配置切点和Bean等。

/**
 * 用于记录日志
 */
@Aspect
@Component
public class SystemLogUtil {
                             // TO-DO
}


我使用了自定义的注解。用于方便找切入点和能显示更多有关要记录的操作方法信息。所以在每个要切入的方法上都贴了注解

@ServiceLog("删除品牌")

所以我写的切点如下:

 

    // 切点
    @Pointcut("@annotation(ServiceLog)")
    private void serviceAspect() {
    }

直接切到有注解的方法上。其实不用注解作为切入点也是可以的。但上面我也说了,是为了能得到方法上的注解信息内容,日志的信息就能更直接是了,记录下的方法的用途也显示了。

还有就是为了后面能控制要记录日志的方法。只要把要记录日志的方法注解信息保存到数据库中,如果不想记录这方法的日志就把对的注解信息在数据库删除就可以。

 

 记录异常信息:当要记录操作方法所抛出的异常信息,也可以用AOP切面编程方式来实现。

 

  // 异常通知 用于拦截service层记录异常日志
    @AfterThrowing(pointcut = "serviceAspect()", throwing = "e")
    private void doAfterThrow(JoinPoint joinPoint, Throwable e) {
                                //TO-DO
 }

 

 

这是用了@AfterThrowing注解。会拦截切点的方法所抛出的异常,拦截到了就可以做异常日志的记录了。

相对Log4j的方法,这种去日志信息的控制会比较方便。还有就是使用slf4j的话,在拼接日志信息会比Log4j会更简单。slf4j的方式更像C语言的写法

 

//Log4j方式:
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
//sl4j 方式:
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

 

团队:在做这个项目的前期,我们小组出现了很多状况,可以说是出师不利。问题是在使用SVN的版本控制软件问题。因为每个小组成员的电脑系统原因,产生各种各样的问题。成员间有分歧,说要改用git。但我们还是把决定权交给组长。后面的开发就比较顺利。

 

总结:通过这个项目,对项目开发可以说是有个大概的了解吧。我们小组间的交流还算是可以吧。项目中学会了,如果有什么不会就先去google、百度,再不行就请教组员。还学到了代码不是一次就能写出好的代码,都是先实现基本的功能,再慢慢去改善.


回复 使用道具
举报
xmf

发表于 02-09 02:43 显示全部楼层

回复 支持 反对 使用道具
举报
森之树

发表于 02-08 22:50 显示全部楼层

回复 支持 反对 使用道具
举报
magicpapacy

发表于 02-08 19:46 显示全部楼层

回复 支持 反对 使用道具
举报
易文沁

发表于 02-08 19:38 显示全部楼层

回复 支持 反对 使用道具
举报
涅槃兰心

发表于 02-08 14:54 显示全部楼层

  ╭══╮ ┌══════┐

  ╭╯让路║═‖ 酱油专用车 ‖

  ╰⊙═⊙╯ └══⊙═⊙═~. 作为一个资深的酱油党,我们需要做的不仅仅是路过,在路过的同时 还要关心楼主,鼓励楼主,在这个冷漠的时代,给予楼主温暖。酱油党莅临的地方,不仅仅是挽尊,不仅仅是消灭零回复,酱油

回复 支持 反对 使用道具
举报
昨夜一厕狼

发表于 02-08 12:27 显示全部楼层

楼主再见

回复 支持 反对 使用道具
举报
晴天屁屁

发表于 02-08 09:05 显示全部楼层

活跃活跃论坛气氛~求楼主加好友

回复 支持 反对 使用道具
举报
甜甜车

发表于 02-08 07:37 显示全部楼层

1 先请大家注意我的头像。看到什么诡异的吗。 2 然后请大家仔细看我的ID,有什么内涵? 3 没看出来就默念我的ID 十遍,然后结合我的头像一起看!! 4 好了,你继续往楼下看吧,我就是来混脸熟的。

回复 支持 反对 使用道具
举报
我爱大菠萝

发表于 02-08 04:19 显示全部楼层

楼主你好

回复 支持 反对 使用道具
举报
12下一页

发表新文章
王一萍老师

小码哥班主任团队

0

学分

871

学币

1047

积分

小码哥班主任团队

Rank: 4

积分
1047

小码哥2017限定勋章关注新浪微博关注小码哥教育公众号小码哥一周年勋章活动达人勋章真人认证勋章小码哥准考证勋章前100注册用户勋章意见领袖勋章小码哥Java学员勋章论坛百帖达成勋章真土豪勋章勋章签到周冠军勋章签到月冠军勋章签到超新星勋章签到之王勋章小码哥周年庆杯子小码哥周年庆纪念勋章小码哥周年庆手机壳小码哥周年庆鼠标垫小码哥周年庆T恤

Ta的主页 发消息
精华帖排行榜

精彩推荐

  • 关注小码哥教育