关于Web开发中“程序=数据结构+算法”的思考

在这里统一说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. 另外一方面以数据拆解的思想尽量把复杂逻辑变简单。

一些伪代码示例

  • 存储示例

<?php
$input = $_post['input'];

// 拆分 start
$product = $input['product'];
$product_sku = $input['product_sku'];
// 拆分 end

// 存储过程示例 start
$db = Db::beginTransation();
try {
    $product_id = Product::save($product); // 单个存储
    ProductSku::save($product_sku,$product_id); // 单个存储
    $db->commit();
} catch(DbException $e) {
    $db->rollBack(); // 出错回滚
}
// 存储过程示例 end
  • 输出示例

<?php
// 确定输出数据结构 start
$result_data = [
    'member' => [
        '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

// 组装数据并输出 start
return [
    'member' => $member,
    'order_list' => $order_list
];
// 组装数据并输出 end

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

这几天 SF 增加了新的板块——直播。我也收到了官方的邀请。4 月 7 日(本周五)晚 20:30 和大家一起聊聊项目中的一些总结。讲座传送: Yii2之RESTful程序基础设计及目录规划

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值