优惠券模块改版总结

1.时间字段统一使用date类型,但是考虑到前端是使用时间空间得到的字符串所以支持传入字符串。

新增: CouponInward extends CouponSuper<String>

输出: Coupon extends CouponSuper<Date>

 

2.把有关联的对象作为子对象,这样可以突显出有关联的字段的关系。也可以比较方便的控制对象转化为Json的长度。其他人接收到对象后也比较好理解,之前有很多相似的名称,容易混淆。

 

 

封装

隐藏对象的属性和实现细节,仅仅对外公开接口。

封装具有一下优点:

 

便于使用者正确、方便的使用系统,防止使用者错误修改系统属性;

有助于建立各个系统之间的松耦合关系;

提高软件的可重用性;

降低了大型系统的风险,即便整个系统不成功,个别独立的子系统有可能还有价值。

封装的两大原则:

 

把尽可能多的东西藏起来,对外提供简洁的接口;

把所有的属性封装起来。

3..把有关联的对象作为子对象,在小对象关联大对象时很有用,可以把子类对象注入替换。例子:优惠券关联活动信息。这样子会有很大的扩展空间

 

 

4.缓存对象。数据在系统内的三种形式:db或文件记录,本地缓存,redis分布式缓存。

1.db或文件记录(持久化对象) 数据库提供了事务控制。最稳定,可控。在数据量和关联关系操作猛增时,可能遇到瓶颈。数据库执行sql是需要一定的时间的,等待执行的队列可能会很长。

2.本地缓存,读取最快,效率最高。缺点是没法实时更新状态,而且本地变化了没有办法通知其它节点。

3.redis分布式缓存,综合了上面两部的部分优点,是对上面两种方式的有益补充。

1).可以提供加解锁,实现类似于db的事务控制

2).分布式缓存,保持了完整的对象,只需要一点点的网络通信和序列化消耗。有效的分摊了db的压力。同时更改后的内容所有节点共享。

 

 

5.数据库字段与bean对象不需要一一对应,bean为业务服务,需要尽量灵活,可以有多层,但只体现一对一关系。一对多的关系在数据库时,千万不要用逗号分隔都偷懒的方式

 

6.无论bean对象还是mapper中的对象,要善于利用继承和关联。可以降低非常多的代码重复度。各个接口之间转化一下类型就可以直接使用,比如CouponVo类继承了Couponl类,就可以在很多使用Coupon类作为参数的地方使用。充分发挥

多态

java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。

 

7.可以把核心算法独立开发,写一个简略版本。使用junit编写足够多的测试用例。例子:优惠券的计算逻辑简化版

 

8.尽量保证本模块的独立性,不要和其它的模块类和对象,他们调用我的接口时传入我指定的类型。降低模块之间耦合度。避免外部模块变化的影响

 

9.在一个请求内有状态的数据可以和无状态的数据分开查询。比如:所有和券码有关的coupon 都从本地缓存中读取。保持t_coupon_code表查询时的效率

 

10.数据库内部保存的关联关系字段最好统一使用code,不要一些用id,一些用code作为外键。对外提供的接口最好可以统一使用code作为查询条件。

 

11.大刀阔斧的改革需要根据实际可获得的支持来调整预期的目标。数据库字段修改,bean对象类修改,可控,但是前端修改需要其他支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值