| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
shuenjian
8年前发布

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

   <p>在这里统一说Web开发,可能有失颇偏,毕竟我后端一直都是用PHP实现的,没用过.net也没用过java,但我想大体都是一样都,我就此阐述一下我所认为的“程序=数据结构+算法”。</p>    <h2>输入输出思想</h2>    <ol>     <li> <p>相对于前端程序来说,前端用户的操作为输入,然后经过逻辑处理后,把数据输出到后端;</p> </li>     <li> <p>相对于后端程序来说,从数据库取数据算做输入,然后经过处理后,输出到前端展示;</p> </li>     <li> <p>相对于数据库来说,对于数据的操作指令为输入,操作后产生的输出结果为输出(如删除成功返回值,写入成功后返回值等)</p> </li>    </ol>    <h2>开发过程中的逻辑处理思想</h2>    <ul>     <li> <p>后端输出到前端展示逻辑</p> </li>    </ul>    <ol>     <li> <p>基于输入输出的思想:输入(数据)+处理(算法)+输出(数据);</p> </li>     <li> <p>数据由数据结构组成;</p> </li>     <li> <p>根据具体业务需求,确定输出的数据结构;</p> </li>     <li> <p>如果确定的输出数据结构过于复杂,拆分为单个简单数据结构实现;</p> </li>     <li> <p>确定单个简单数据结构的输入源;</p> </li>     <li> <p>确定输入源的数据结构;</p> </li>     <li> <p>用算法逻辑把输入源转化为输出数据;</p> </li>     <li> <p>把单个简单数据结构组装为最终的复杂输出数据结构;</p> </li>     <li> <p>前端遍历输出的内容,拆解数据做显示。</p> </li>    </ol>    <ul>     <li> <p>前端输入到后端的处理逻辑</p> </li>    </ul>    <ol>     <li> <p>确定后端需要存储的数据结构;</p> </li>     <li> <p>把复杂的输入数据结构拆分为简单数据结构;</p> </li>     <li> <p>根据简单数据结构,遍历用户输入内容取得输入数据组装;</p> </li>     <li> <p>组装简单的输入数据结构传递到后端;</p> </li>     <li> <p>后端拆解前端输入的复杂数据结构为简单数据结构;</p> </li>     <li> <p>遍历单个复杂数据结构并存储,且返回每个步骤的存储结果,出错做数据回滚;</p> </li>     <li> <p>把存储结果返回。</p> </li>    </ol>    <ul>     <li> <p>其他思考</p> </li>    </ul>    <ol>     <li> <p>具体业务逻辑可能相对更复杂,一般get方式取数据对应的是后端的输出逻辑思想,数据存储对应的是前端输入思想。</p> </li>     <li> <p>这套的想法主要目的是把复杂程序尽量做简化,并以数据和算法的思想去思考程序本身。</p> </li>     <li> <p>另外一方面以数据拆解的思想尽量把复杂逻辑变简单。</p> </li>    </ol>    <h2>一些伪代码示例</h2>    <ul>     <li> <p>存储示例</p> </li>    </ul>    <pre>  <code class="language-javascript"><?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</code></pre>    <ul>     <li> <p>输出示例</p> </li>    </ul>    <pre>  <code class="language-javascript"><?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</code></pre>    <p>前端思想同样如是,我就不做说明了。</p>    <p> </p>    <p>来自:https://segmentfault.com/a/1190000008960415</p>    <p> </p>    
 本文由用户 shuenjian 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1491534260717.html
数据结构 算法 Web开发 前端技术