点击上方“蓝字”关注我们

菜菜哥,求你个事呗?

说来听听,假装你男朋友可不干

不是哦,是正经事。前几天一个项目UI改了,好多人跟着加班修改,怎么样尽量避免这种情况呢?

UI修改顶多和客户端开发人员关系密切,你一个后端人员还牵扯那么大吗?

我也纳闷呢?为什么会牵扯到我

看来你面向UI编程了!!

摒弃面向UI编程

为何喷起此次话题,因为前不久和我们首席架构师沟通,谈起程序设计问题,一不小心把UI扯进来,更把那些按照UI来编程的后台工程师也扯了进来。今天特意百度了一下(其实程序员应该去google一下,奈何需要FQ),确实没有面向UI编程这个概念在市面上流传,大家可以当我是首创吧。需要声明一点,这里喷的是服务器开发人员哦!!

我是一个极具打抱不平的人,浪迹编程十几年,见过太多的程序员因为UI改了,而跟着改程序。当年菜菜一不小心踏入歧途的时候,每天看着《七天入门xxx》乐此不疲,猛烈的消化着书中“极具文化”的内容。然后看着“该死”的产品经理发过来的原型图,费劲脑汁把数据库设计的特别符合原型图,然后开心的干起CUAD,你看,编程就是如此简单!!而且当年觉得自己不可一世,可以进阶架构师了

原来初生牛犊真的可以不怕虎,是因为虎厉害吗?不,是因为牛犊还太傻X

无论是产经经理,还是前端开发人员,更或者是后端开发人员或者DBA,一切的工作都是围绕业务开展的,产品经理首先是第一个消化并理解业务的人,有的产品经理自己还未消化业务就做出原型图,概念图脑图等等,这些产品经理其实才是该死的。当产品把业务正确的用UI表达出来之后,业务便传到了客户端人员,至于服务端代码编写人员如果按照UI来理解业务,甚至设计数据库表,那多半是掉坑里了

无论是客户端人员还是服务端人员,写代码之前首先第一要做的,而且也是最重要的就是消化业务内容,把业务消化了写起代码来,有时候会对那些将来有扩展性的地方情不自禁留出扩展点。业务有时候就是要做一件事的过程,数据的流向而已,整体把握了才能设计出可以掌控的系统。

面向业务编程

其实上面说了这么多,都比较“抽象”,别人会说你写的什么JB玩意,骂归骂,但是不能侮辱我对技术的热爱~~~

喷了那么多,看一个原型,话说这个产品画的还是不错的

一个简单的发帖动态内容的展示,如此简单的需求,你的系统该如何设计呢?

错误1

根据UI的设计,很多人第一步就开始设计数据库对应UI

字段 介绍
Id 动态id
PublishUserId 发布人id
PublishUserName 发布人姓名
PublisherUserImg 发布人头像
..... ....

很多人会这样设计,其中不乏有些高级程序员,我自认为这样是错误的,说说我的想法,欢迎你们来喷。这是一个简单的动态展示,仔细分析你会发现这个业务其实包含一些子业务:动态的发布人业务,动态内容业务,动态内容产生的外围业务(点赞,留言,收藏等),如果硬是对应到表设计,也应该包含这三部分内容。

任何数据库设计都不应该一一对应UI,UI只是你设计的参考而已,只是很多情况下业务模型正好和UI对应而已

错误2

很多人把发布人的姓名,头像保存在了动态表,我认为这个还要看这个动态的定义,如果动态的发布人明确了不会随着发布人信息的修改而变动,这个确实应该一次性保存,如果反之,只存一个用户Id足以,这样还可以避免因为发布人修改信息而带来的同步数据问题,要知道数据一致性这块其实是很烦人的。

不要让UI的显示内容,影响你的业务设计

错误3

动态的内容后续产生的数据(点赞,收藏,评论)这些业务在动态中都有量化,那这个具体的数据量化值很多人选择在动态表中添加对应的字段(点赞总量,收藏总量等等)。其实我不建议这样做,原因如下:

1. 如果新建了这些字段来保存,动态的每一次产生结果都需要更新对应的字段,同时还要保证这个值和详细列表的数据一致性,不能产生100条评论,但是评论列表只有99条的情况发生。

2. 如果将来又新加了一条新的业务,比如分享的数量,那是不是还要在加一个分享量的数据表字段呢?

3. 如果你读过菜菜以前的文章,应该知道菜菜一贯的尿性,这种动态的东西最适合做缓存,无论你愿意与否。至于这些点赞总数等这些类似业务,仔细分析只不过是属于动态内容的后续业务,应该包含在整体业务之中,如果非要撸一行代码:

public class Topic{public int Id;    public string Content;...    public int ThumbUpNumber: //点赞数量public int CommentNumber; //评论数量...}

需要注意一点:我以上代码代表的是业务对象,可不是对应的DB中的表哦,这个业务对象也是我们要缓存的对象,当新加一条评论或点赞的时候,只不过是缓存数据的+1操作而已,至于这个数据值的初始化,完全可以由详情表来提供,在真实的业务中,点赞或者评论的数据量很少到达万级别,所以对于select count(0)这个操作来说都不是问题,一旦初始化完成做了缓存,后续的增加数量完全在内存中完成。

这里我想喷:任何业务数据库都不是架构设计的中心

写在最后

一个业务的成败在于产品设计,一个系统设计的好坏,成败在于程序员,在业务正确的情况下,请先消化掉业务再开始设计系统,UI只是你消化业务的参考,UI只是你业务的具体可视化体现。

●程序员修神之路--为什么我会了SOA,你们还要逼我学微服务?

●程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁

●程序员修神之路--设计一套RPC框架并非易事

●程序员过关斩将--要想获取我的用户信息,就得按照规矩来

●程序员过关斩将--更加优雅的Token认证方式JWT

●程序员过关斩将--cookie和session的关系其实很简单

●程序员修神之路--用NOSql给高并发系统加速

●程序员修神之路--高并发系统设计负载均衡架构

●程序员过关斩将--你为什么还在用存储过程?

●程序员修神之路--问世间异步为何物?

●程序员修神之路--提高网站的吞吐

长按添加菜菜好友

关注后回复:“大礼包”和“福利”,领取惊喜

程序员过关斩将-- 喷一喷坑爹的面向UI编程相关推荐

  1. 第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!

    最近,有很多关于程序员被抓甚至被判刑的新闻在朋友圈疯传:"某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓.某公司利用爬虫抓取用户信息,最后被发现,导致该公司的程序员 ...

  2. 最近程序员频繁被抓,如何避免面向监狱编程?!

    最近,有很多关于程序员被抓甚至被判刑的新闻在朋友圈疯传: "某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓. 某公司利用爬虫抓取用户信息,最后被发现,导致该公司的程 ...

  3. 最近程序员频繁被抓,如何避免面向监狱编程!?

    最近,有关程序员因为参与某些项目开发导致被起诉,甚至被判刑的事件发生的比较多: 某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓. 某公司利用爬虫抓取用户信息,最后被发现,导致 ...

  4. 程序员过关斩将--作为一个架构师,我是不是应该有很多职责?

    点击上方"蓝字"关注我们领取架构书籍 每一个程序员都有一个架构梦. 上面其实本质上是一句富有事实哲理的废话,要不然也不会有这么多人关注你的公众号.这些年随着"企业数字化& ...

  5. 程序员过关斩将-- 工作好多年可能还未真正了解接口和抽象类

    点击上方"蓝字"关注我们 菜菜哥,我偷偷出去面试了,然后面试官让我回来等消息 那你可能挂了呀,有什么问题没回答上来吗 确实有一个问题回答的不太好哎,就是接口和抽象类 这个确实是面试 ...

  6. 程序员过关斩将--少年派登录安全的奇幻遐想

    " 据说,这篇也是快餐,完全符合年轻人口味 说到登录,无人不知无人不晓.每一个有用户体系的相关系统都会有登录的入口,登录是为了确认操作人的正确性.说到登录安全,其实是一个很伟大的命题,不过常 ...

  7. 程序员过关斩将--请不要误会redis 6.0 的多线程

    " 你对redis的单线程是不是有点误会? " 你对redis 6.0的多线程是不是也有点误会? " redis多线程一定可以提高性能吗? redis官方刚刚发布的6.0 ...

  8. 程序员过关斩将--从未停止过的系统架构设计步伐

    " 首先,这篇文章肯定会得罪一些人 " 其次,此文只代表我个人的意见,仅供参考 从分层说起 谈到系统架构的分层和系统领域边界的划分,每个架构师,每个技术经理,甚至每个程序员都有自己 ...

  9. 程序员过关斩将--应对高并发系统有没有通用的解决方案呢?

    " 灵魂拷问: 应对高并发系统有没有一些通用的解决方案呢? 这些方案解决了什么问题呢? 这些方案有那些优势和劣势呢? 对性能孜孜不倦的追求是互联网技术不断发展的根本驱动力,从最初的大型机到现 ...

最新文章

  1. 孙琦:大数据思维助力我探究能源颗粒机理 | 提升之路系列(四)
  2. 为啥不上SOA?中国企业的四大投资顾虑
  3. 如何高效学习 Kubernetes 知识图谱?
  4. 数据结构课程设计------扫雷游戏(升级版,可展开)
  5. 【转】SharePoint 2010 用户自定义编辑Meta标签的OOB方法
  6. TPS、QPS、系统吞吐量、并发用户数区别及性能术语的理解
  7. 停止页面定时刷新_Flutter实现倒计时功能、定时任务功能
  8. SWOT分析法(态势分析法)
  9. python一个函数调用另一个函数_python下如何在目录下让Python文件去调用另一个文件内的函数或类...
  10. Silverlight Blend动画设计系列二:旋转动画(RotateTransform)
  11. centos 添加windows字体库
  12. Spring Boot内嵌的tomcat日志
  13. VBA按行读取TXT文本文件
  14. android7+预装+卸载,国内安卓用户救星:7月1日起,手机预装App必须支持卸载!
  15. STM32 之十二 FLASH 使用详解 及 LL 库 FLASH 驱动实现
  16. H5页面调用手机扫一扫功能
  17. 【Webpack 性能优化系列(2) - source-map】
  18. 树莓派/arm设备上安装火狐Firefox浏览器
  19. 网上图书商城项目学习笔记-018生成订单
  20. python 战舰_419. 甲板上的战舰(Python)

热门文章

  1. linkButton与Button 的click事件与onclientClick事件
  2. php token 验证,PHP如何实现Token验证
  3. mysql date类型加一个月jdbc_JDBC操作数据库Date类型数据
  4. 看着手机会让您晕眩吗? 禁用动画
  5. 如何使用卡巴斯基急救盘清理感染的PC
  6. 第一季度ADC市场份额揭榜 A10 Networks再获用户青睐
  7. 远程连接mysql速度慢的解决方法
  8. Oracle级联查询
  9. 最全前端开发面试问题及答案整理
  10. android下升级软件介绍