最近几个月,与公司Boss大雷交流得比较多,也学习到了很多新的东西,了解到了一些没有接触和实践的业界做法。

简要介绍下Boss,姓雷,定居武汉好几年了,之前在一号店、UC、支付宝干过,有丰富的电商-支付-游戏开发经验。

这几个月,我一边工作,一遍学习了下他的设计。这些设计,Boss主要参考了支付宝等前几家公司的架构设计经验,当然还有自己对技术的理解,对一起好项目的业务理解。

最近探讨的若干问题:

1.p2p算不算电商网站。
  应该算,水电费缴费也算。电商是个很大的概念,当然购物网站、不同的购物网站、P2P理财,还是有不同玩法的。
每个细分领域、每个公司都有自己的特色,要不然竞争太激烈,也不容易生存下来。比如某公司的平台做得好,某公司的物流很牛逼,某公司的食品还不错,某公司的图书很火爆。

2.开发过程中,账务系统先不做成WebService,只做成普通的接口,提高整体的开发效率,后期再重构成服务不就行了么。
  Boss不这么认为,根据他之前的经验,前期你一旦开发好了,提供了接口,别人的调用,你无法控制,因为别人引入了包之后,所有的API都可以进行调用。另外的问题是,自己写的代码和别人的代码可能会有循环依赖,一个项目的代码过多,加载启动变慢。

我的观念和Boss的观念有很大的不同,主要是由于,他在大公司干的多,团队比较多,项目协调管理麻烦一些。而我更多是在技术团队比较小的公司,我觉得人就这么多,追求开发效率,不会存在太多随便调用的情况。

3.Spring中的@Autowired和@Resource。
  在最初学习的时候,用Resource,后来偷懒,就用了Autowire,后来甚至只要实现类,根本不要神马接口。因为,在我参与和独自写的项目中,一个接口一般就一个实现类,很少有一个接口多个实现类的场景。定义那么多接口,用Resource注解,麻烦很多。
  而Boss认为,@AUtowired现在是没有问题,后来不知道什么时候就遇到问题了,之前经历过这种类似的问题。既然知道可能会有这个问题,现在就避免它出现。另外,就是写代码本身只占实际开发时间的很小一部分,花不了多少时间。我觉得这一点还是很有道理的,写代码太简单了,难点在于思考如何实现一个业务。
 @Autowired(required=false),不同的注解还是有不同之处的,以前真心没有研究过,或者遇到这么个需求。

4.Map与Model。
  很久以前,尤其在用Hibernate那段时间,我就用Model,一个项目建立了很多实体类。后来用Mybatis,自己讨厌建立太多Bean,正好公司大牛那段时间也用了Map,所以很久以来,我主要用的是Map接收参数和传递数据。但是,发现Map也有自己的缺点,可读性太差了,也不方便协调。即使是几个人开发,如果项目有很多逻辑要处理,用Map也确实不好搞,毕竟Map与Java强类型和面向对象的优势有点矛盾。

Boss自身,更偏好用Model,用面向对象,可读性好。当然,有时又想偷懒,一个Model是多个用处的,也存在一定让人纠结的地方。比如一个Model中的属性,有时有值,有时没有值。

我喜欢用Map,还有一个理由,就是遇到的每一个问题,用Map也确实可以解决。想想看,Map和Model都是数据类型,本质还是一样的嘛。

根据自己这几年的实践来看,如果强调可读性、可维护性、面线对象,或者项目成员比较多、项目业务逻辑比较多和复杂,用Model是比较好的。如果是自己开发一个小项目,用Map还是很不错的。

这里面还存在一个问题,用Map和Model是2种不同的哲学,代码实现还是很有区别的。意味着,你同时维护2套代码,思想负担有点大。

就目前的心态来看,今后我的项目,还是主要尽可能用Model,尽可能不再用Map,除非Map真得比较符合实际需求。

5.安全问题。
 前几天,铁路票务系统账号泄露。我关注了下,实际上是别人碰库搞出来的,然后那2个黑客被抓起来了。
 于是,和Boss探讨了Md5加密问题。我感觉md5也不是很安全啊,如果数据库泄漏了,别人根据你的加密算法,搞个彩虹表,就很快把你的密码明文给拿到了,然后你就跪得很彻底了。

Boss是看法是,md5加密确实有这个问题,实际主要是防止内部人的。如果数据库泄漏了,安全真的很难保障。我想到的是,除了MD5再搞一套自己定义的加密,即先自己加密,再MD5加密,更安全。Boss的想法是,你是更安全了,但是开发成本也更高了,而且你牛逼了,黑客也会更加牛逼的。

此外,Boss还透露一个小道消息,国内的那些高级黑客,都是有圈子的,而且是分产业链,盗号与卖钱是分开的。阿里等大公司,除了有自己的安全团队外,可能每年还要花费不少的公关费,把自己泄漏的信息花钱给买回来。或者,“向黑客交保护费”,你不要攻击我啊,我给你钱,要攻击,你去攻击我的对手去。

前几年,不少公司数据库泄漏,黑客太嚣张了,后来,有的被抓起来了,黑客们也更加注重自保。

6.账务系统
  账务系统,通用性还是比较强的,与其它系统相对比较独立。按照账务系统提供的接口进行调用,很容易实现不同系统之间的对接。

电商网站、第三方支付、银行,账务系统各有各的。

可能不会实时去对账,不然成本太高,2元一笔的费用之类的,量太大,自己内部算好,然后和银行一次接口通信就处理完了,比如批量转账接口。

7.通用DAO方法。
 我非常喜欢去写通用的DAO方法,想少写代码,多个项目都能用。而Boss不喜欢这样,他担心太通用,别人可能会滥用,导致系统不稳定。
  这又是一个观念不同的地方,我自己一个人开发,怎么调用非常清楚,也不会去随便调用,错误地调用当然可能出现问题。而多个人,也确实不好控制。

与Boss大雷探讨JavaWeb开发、电商与网络安全的更多相关文章

  1. 开发电商平台用PHP语言和JAVA语言有什么区别?哪种语言更好?

    现在很多行业都通过电子商务拓展业务,所以商城系统开发成为很多企业的刚性需求.一般有一点技术基础的客户应该知道目前商城系统开发主流语言有两个,PHP和Java.那么很多客户朋友会纠结是选择哪个语言开发好 ...

  2. 使用Websocket框架之GatewayWorker开发电商平台买家与卖家实时通讯

    前段时间公司提了一个新的需求,在商品的详情页要实现站内买家和商品卖家实时通讯的功能以方便沟通促成交易,要开发此功能当时首先考虑到的就是swoole和workerman了,从网上大概了解了一下关于这两款 ...

  3. 基于TP5使用Websocket框架之GatewayWorker开发电商平台买家与卖家实时通讯

    https://www.cnblogs.com/wt645631686/p/7366924.html 前段时间公司提了一个新的需求,在商品的详情页要实现站内买家和商品卖家实时通讯的功能以方便沟通促成交 ...

  4. 大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

    第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark ...

  5. PHP基于TP5使用Websocket框架之GatewayWorker开发电商平台买家与卖家实时通讯

    前段时间公司提了一个新的需求,在商品的详情页要实现站内买家和商品卖家实时通讯的功能以方便沟通促成交易,要开发此功能当时首先考虑到的就是swoole和workerman了,从网上大概了解了一下关于这两款 ...

  6. Jquery开发电商网站实战(带源码)

    组件化思想,包含: 下拉菜单项封装 + 按需加载 搜索功能组件化,显示数据 + 下拉显示 + 缓存 分类导航按需加载 幻灯片效果组件封装及按需加载 商品楼层模块组件化 + 商品数据按需加载 + Tab ...

  7. 微服务架构开发电商系统需要用Redis、ES和MQ吗?

    如果不用什么很高大上的东西,就是有多个微服务就行这种技术架构会很难吗? 我看了一些视频,他们都用到了es.mq.redis的东西,我想不用这些东西,就简单的有多个服务,这样可行吗? 01 使用微服务你 ...

  8. C#大型电商项目优化(二)——嫌弃EF与抛弃EF

    上一篇博文中讲述了使用EF开发电商项目的代码基础篇,提到EF后,一语激起千层浪.不少园友纷纷表示:EF不适合增长速度飞快的互联网项目,EF只适合企业级应用等等. 也有部分高手提到了分布式,确实,性能优 ...

  9. 把握这两点,抢占下一个电商风口|2016最新中国电商App排名&研究报告

    序言 电商,是随着中国互联网经济的持续发展所成长起来的.淘宝.京东这些电商从交易额和影响力上看都位列中国最为成功.最具话题性的互联网企业之中.尽管近几年中国经济有所放缓,但中国消费市场的增长速度仍有望 ...

随机推荐

  1. angular设置全局变量,可修改监听变量

    创建service.module.ts import { NgModule, ModuleWithProviders } from '@angular/core'; import { SomeShar ...

  2. spring与cxf整合配置webservice接口(以jaxws:server的方式配置)

    ps:最近项目需要跟其他系统做同步,需要使用webservice来提供接口给其他系统调用:临时抱佛脚赶紧去网上找了下资料,发现用Endpoint的方式发布接口好容易哦:赶紧写了个例子做验证,发布成功. ...

  3. 使用Intent的Flag设置启动參数

    Intent中关于激活Activity的Flag Intent类定义了一批常量,用于配置激活Activity时的相关參数; 在Intent中设置Flag ·调用Intent的setFlags()或ad ...

  4. Android 最简洁的获取联系人头像的代码

    ContentResolver cr = view.getContext().getContentResolver(); Uri uri = ContentUris.withAppendedId(Co ...

  5. (转)Oracle EXP-00091解决方法

    转自:http://blog.csdn.net/dracotianlong/article/details/8270136 EXP-: 正在导出有问题的统计信息. . . 正在导出表 WF_GENER ...

  6. 前端js常用正则表达式实例讲解

    本文内容整理自他人优秀的博客,非纯原创.仅借此学习和整理. 1.匹配用户名 规则描述: 长度4-6位: {4,16} 字母: [a-z] [A-Z] 数字: [0-9] 下划线: [_] 减号: [- ...

  7. 【例题 6-4 UVA - 11988】Broken Keyboard (a.k.a. Beiju Text)

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会链表的插入操作的话.这个就不难了. 放置两个哨兵节点. 然后模拟插入一个节点的过程就好. 实时修改光标就好->即下一个插入的 ...

  8. AM335x(TQ335x)学习笔记——Nand&&网卡驱动移植

    移植完毕声卡驱动之后本想再接再励,移植网卡驱动,但没想到的是TI维护的内核太健壮,移植网卡驱动跟之前移植按键驱动一样简单,Nand驱动也是如此,于是,本人将Nand和网卡放在同一篇文章中介绍.介绍之前 ...

  9. tensorflow 的 Batch Normalization 实现(tf.nn.moments、tf.nn.batch_normalization)

    tensorflow 在实现 Batch Normalization(各个网络层输出的归一化)时,主要用到以下两个 api: tf.nn.moments(x, axes, name=None, kee ...

  10. 5DXTPlayer串口调试小结

    小结 过程总是艰难. 首先是没有准备好. 没有安装vs2012,安装的时候,出现各种状况,因为先安装的2013高版本,造成12安装不正确,程序编译出问题.没有办法,只好卸载vs2012,2013及其各 ...