博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Web开发中的“程序=数据结构+算法”
阅读量:6957 次
发布时间:2019-06-27

本文共 1504 字,大约阅读时间需要 5 分钟。

在这里统一说Web开发,可能有失颇偏,毕竟我后端一直都是用PHP实现的,没用过.net也没用过java,但我想大体都是一样都,我就此阐述一下我所认为的“程序=数据结构+算法”。

输入输出思想

  1. 相对于前端程序来说,前端用户的操作为输入,然后经过逻辑处理后,把数据输出到后端;
  2. 相对于后端程序来说,从数据库取数据算做输入,然后经过处理后,输出到前端展示;
  3. 相对于数据库来说,对于数据的操作指令为输入,操作后产生的输出结果为输出(如删除成功返回值,写入成功后返回值等)

开发过程中的逻辑处理思想

  • 后端输出到前端展示逻辑
  1. 基于输入输出的思想:输入(数据)+处理(算法)+输出(数据);
  2. 数据由数据结构组成;
  3. 根据具体业务需求,确定输出的数据结构;
  4. 如果确定的输出数据结构过于复杂,拆分为单个简单数据结构实现;
  5. 确定单个简单数据结构的输入源;
  6. 确定输入源的数据结构;
  7. 用算法逻辑把输入源转化为输出数据;
  8. 把单个简单数据结构组装为最终的复杂输出数据结构;
  9. 前端遍历输出的内容,拆解数据做显示。
  • 前端输入到后端的处理逻辑
  1. 确定后端需要存储的数据结构;
  2. 把复杂的输入数据结构拆分为简单数据结构;
  3. 根据简单数据结构,遍历用户输入内容取得输入数据组装;
  4. 组装简单的输入数据结构传递到后端;
  5. 后端拆解前端输入的复杂数据结构为简单数据结构;
  6. 遍历单个复杂数据结构并存储,且返回每个步骤的存储结果,出错做数据回滚;
  7. 把存储结果返回。
  • 其他思考
  1. 具体业务逻辑可能相对更复杂,一般get方式取数据对应的是后端的输出逻辑思想,数据存储对应的是前端输入思想。
  2. 这套的想法主要目的是把复杂程序尽量做简化,并以数据和算法的思想去思考程序本身。
  3. 另外一方面以数据拆解的思想尽量把复杂逻辑变简单。

一些伪代码示例

  • 存储示例
commit();} catch(DbException $e) { $db->rollBack(); // 出错回滚}// 存储过程示例 end复制代码
  • 输出示例
[ 'member_id' => 3, 'member_name' => '用户名' ], 'order_list' => [ [ 'order_id' => 1, 'order_sn' => '订单号' ], [ 'order_id' => 1, 'order_sn' => '订单号' ] ]];// 确定输出数据结构 end// 拆分数据结构处理 start$member = Member::find() -> select(['member_id','member_name']) ->asArray() -> one();$order_list = Order::find() ->select(['order_id','order_sn']) ->asArray() ->all();foreach($order_list as &$item) { $item['time'] = time(); // 对数据列表做其他处理}// 拆分数据结构处理 end// 组装数据并输出 startreturn [ 'member' => $member, 'order_list' => $order_list];// 组装数据并输出 end复制代码

前端思想同样如是,我就不做说明了。

转载地址:http://qmmil.baihongyu.com/

你可能感兴趣的文章
如何在create-react-app项目中使用vw实现手淘vw移动端适配布局
查看>>
Wormhole燃烧地址到底有多安全
查看>>
Web探索之旅 | 第三部分第三课:协议
查看>>
20个优秀手机界面扁平化设计,让你一秒看懂扁平化
查看>>
从百度的PPT文化看程序员晋升
查看>>
Python测试登录功能
查看>>
mysql 创建高性能索引
查看>>
babel插件入门-AST(抽象语法树)
查看>>
分布式ID
查看>>
原声写法操作table
查看>>
10 分钟内快速构建能够承载海量数据的 nginx 日志分析与报警平台
查看>>
完全二叉树实现优先队列与堆排序
查看>>
启动时间知多少?8款音视频类应用测评报告分析
查看>>
公司来了个“奇葩”的程序员
查看>>
ubuntu 16.04下docker的安装
查看>>
web页面渲染(一)
查看>>
roadhog+dva中环境变量的配置
查看>>
js解决0.1+0.2==0.3的问题的几种方法
查看>>
python中#!/usr/bin/python与#!/usr/bin/env python的区别
查看>>
第10章:并发和分布式编程 10.1并发性和线程安全性
查看>>