獨立開發者系列(13)——示例理解面向對象與過程

? ? ?專業術語晦澀難懂,特別是當你沒有寫過稍微大點的系統的時候,你要理解這里面的區別很難。


?????? 從最簡單的早期我們學習開始,我們除了練習hello world掌握了入門函數之后,基本都再練習算法。比如水仙花數的獲取,冒泡排序,碾轉相除法的算法題目,這個時候我們用面向對象來思考,沒有太多意義,因為他單純的只是要解決某個具體的算數層面復雜點。我們大部分情況下,需要的都是推理和算法能力,所以當我們想懂了怎么實現的時候,立刻寫幾行代碼,然后開始run模式,就可以知道我們的想法對了沒對。

? 更復雜點的工程算法,比如抽獎函數的設計(需要考慮到不同獎品出現不同的概率,而且將不同概率輸入該功能函數之后,會返回我們本次的抽獎結果編號),又或者是菜單列表的獲取,需要用到遞歸,讀取每個欄目下級的子欄目,同時將這個結果返回給上級結果(遞歸概念,分類里面最常用的算法),讀取文本里面的N行內容,分析提取我們需要的行(簡單清洗數據的邏輯)。基本上基礎的開發,這些簡單算法堆積的時候,發現面向對象毫無優勢,甚至是劣勢,我為了解答某個題目,腦子里可能出現了N個算法,但是不知道對錯,快速寫代碼跑,直接寫肯定比邊寫還邊組織結構要快很多。而且在接入入門早期的時候,我們更傾向于快速實現效果給其他人看,也就是做一個demo的展示產品,這個時候,更快是我們的目標,而對象天然的就增加了這層思考的復雜度。

? 于是我們開始操作真正的項目,在真正的項目里面,邏輯鏈條和關系復雜度比之前的組織幾個函數方法完全不同概念,在絕大部分的項目里面,不是算法工程師的話,基本極少用到獨自創新的算法,這個時候的工作面臨的是無數個模塊和函數代碼,怎么拼接整理到一起。
最簡單的電商產品下單邏輯,我們用流程化的方法來寫這個功能。思考的流程是這樣的: 我們寫個函數

檢查商品ID——去數據庫查詢產品——查詢是否下架——查詢庫存——查詢商品其他關聯信息——驗證登錄的用戶身份——檢查用戶——檢查用戶購買的數量信息——檢查用戶下單的合法性——.檢查優惠券的合法性——計算當前的訂單價格——計算訂單價格扣除優惠券的計算方法——下單——鎖定住優惠券——….

我們將這個流程從頭到尾,每一步都實現在一個大型的函數方法里面,洋洋灑灑寫了幾百行,終于心滿意足的感覺完成了這個大型功能。這個時候,需求改了,用戶鑒權信息的種類有變更,第二個優惠券可能有很多種,需要重新去N個表里面查詢不同的優惠券。過了一陣子,你回頭來修改代碼,你發現自己密密麻麻的寫了一本天書,中間某個地方錯誤了,你發現不了問題,需要從頭到尾一步一步斷點打印,而且幾乎沒有辦法的去完善系統。因為出一點問題,要查看自己的一整片代碼。

洋洋灑灑寫個上幾百行代碼,封裝到一個函數,直接實現了對應功能,感覺上很方便,沒有其他的干擾,但是在維護和調試的時候,基本都是癱瘓掉。實在是改不動,如果再碰上別人的代碼也是這種風格,邏輯復雜度又很深,基本上就是提桶跑路。接觸的幾個改不下去的項目,基本都是這種風格,洋洋灑灑,代碼堆積在一個方法里面,然后開發不下去了,直接提桶跑路,留給后面的人修改一地雞毛。這是很典型的面向過程開發者思維,就是以完成過程和實現為核心目標,不考慮后續維護和拓展的開發模式。如果不是刻意去學習對象開發方法,大部分人的第一開發定勢都是過程化開發。

而如果是面向對象開始開發,首先我們可以嘗試著將上述流程進行對象化處理—— 產品對象,用戶對象,優惠券 。
我們使用產品對象的獲取方法獲取產品(獲取失敗就退出,那是產品對象出問題了)
同樣獲取用戶對象方法(信息,權限,金額檢測)同樣失敗,退出

優惠券對象方法(檢測優惠券的相關信息)

這樣我不能再按照之前的的流程化邏輯實現我要的功能,而是設計好一個一個對象,然后我用我的總對象去調用各個對象里面的方法,如果某塊出現了問題,我只要直接去調試對應的對象模塊即可。

從這里可以很明顯的看出倆者的特征,當項目的規模比較小的時候,過程化開發更有優勢,因為快速。而面向對象需要不斷設計對應的對象,還要梳理結構。

反過來,當項目越來越大的時候,模塊不斷交叉,對象方法復用度也大幅度提升,對象化開發方法優勢非常明顯。

而考慮到當前的主要項目,其實一般都是第一期簡單,如果有二三四期開發工程的情況,如果你為了快速完成一期使用了過程化開發方法,后面會非常痛苦來調整,所以在一般情況下,大部分項目(除了極少部分你確定知道規模很小的項目)默認采用對象化開發方法,為后期拓展性奠定比較好的基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37970.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37970.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37970.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis的使用和原理

目錄 1.初識Redis 1.1 Redis是什么? 1.2 Redis的特性 1.2.1 速度快 1.2.2 基于鍵值對的數據結構服務器 1.2.3 豐富的功能 1.2.4 簡單穩定 1.2.5 持久化 1.2.6 主從復制 1.2.7 高可用和分布式 1.3 Redis的使用場景 1.3.1 緩存 1.3.2 排行榜系統 1.3.3 計數器應用 1.3…

【計算機網絡】HTTPS——更安全的HTTP通信(個人筆記)

學習日期:2024.6.26 內容摘要:HTTPS存在的意義、特點和工作方式 HTTP的缺點——易竊聽、偽裝、篡改 在Web及網絡基礎中,我們已經知道了網頁是怎么打開的,HTTP確實是一個相當優秀和方便的協議,但HTTP也有很多不足&…

【操作系統期末速成】 EP04 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言🚀🚀🚀二、正文:??????2.1 考點七:進程通信2.2 考點八:線程的概念2.3 考點九:處理機調度的概念及原則2.4 考點十:調度方式與調度算法 一、前言🚀…

排序(冒泡排序、選擇排序、插入排序、希爾排序)-->深度剖析(一)

歡迎來到我的Blog,點擊關注哦💕 前言 排序是一種基本的數據處理操作,它涉及將一系列項目重新排列,以便按照指定的標準(通常是數值大小)進行排序。在C語言中,排序算法是用來對元素進行排序的一系…

FPGA 690T NVME高速存儲設計

高速存儲設計會有各種需求的考慮,那么對應的方案也不完全相同,這篇文章出一期純FPGA實現的高速存儲方案。用純fpga實現高速存儲板卡有易國產化,功耗低和體積小等特點,缺點就是靈活性不是很強,實現標準ext4和nfs文件系統…

計算機的錯誤計算(十六)

摘要 計算機的錯誤計算(十五)中歷史事件給我們的啟示或警示。 計算機的錯誤計算(十五)介紹了歷史上發生的一些事件。從這些事件我們可以得到一些啟示或警示。 若不是油氣平臺的沉沒,設計者會得出精度低了嗎&#x…

信息盲盒系統設計

信息盲盒系統是一種結合了隨機性和趣味性的信息傳遞和接收方式,類似于實體盲盒的概念,但在數字領域應用。這種系統通常用于增加用戶參與度、提升用戶體驗或作為營銷策略的一部分。設計一個信息盲盒系統需要考慮以下幾個關鍵要素: 1. 定義目標…

數據倉庫建模基礎理論-01-為什么需要數據建模?

一、什么是數據模型? 數據模型是數據庫的基礎結構,用于描述和組織數據的方式。 它不僅是數據庫的底層結構,還是一個概念性工具,幫助理解數據的含義和關系。 數據模型包括數據本身、數據之間的關系、數據的語義(含義和…

C++ | Leetcode C++題解之第206題反轉鏈表

題目: 題解: class Solution { public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) {return head;}ListNode* newHead reverseList(head->next);head->next->next head;head->next nullptr;return newHead;} …

在Ubuntu 16.04上安裝和配置GitLab的方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。 簡介 GitLab CE(Community Edition)是一個開源應用程序,主要用于托管 Git 倉庫,并提供額…

AI在創造還是毀掉音樂之論文

AI在創造還是毀掉音樂? 簡介:最近一個月,輪番上線的音樂大模型,一舉將素人生產音樂的門檻降到了最低,并掀起了音樂圈會不會被AI徹底顛覆的討論。短暫的興奮后,AI產品的版權歸屬于誰,創意產業要…

一秒記單詞:音通義通,一秒牢記

一秒記單詞,從小學到高中,一秒牢記 一、小學生記單詞,快速突破 1.1 好的開始,是成功的一半 sun n.太陽 【通】尚 moon n.月亮 【通】母恩 mother n.母親,媽 【通】媽汁 sea n.海,大海 【通】細 sand …

【MySQL基礎篇】SQL指令:DQL及DCL

1、DQL DQL - 介紹 DQL英文全稱是Data Query Language(數據查詢語言),數據查詢語言,用來查詢數據表中的記錄。(在MySQL中應用是最為廣泛的) 查詢關鍵字:SELECT DQL - 語法 SELECT 字段列表 FROM 表名列表 WHER…

【人工智能學習之圖像操作(六)】

【人工智能學習之圖像操作(六)】 Hough變換直線檢測圓檢測 圖像分割 Hough變換 在圖像處理中,霍夫變換用來檢測任意能夠用數學公式表達的形狀,即使這個形狀被破壞或者有點扭曲 直線檢測 import cv2 import numpy as np image …

利用微信開放標簽<wx-open-launch-weapp>在H5中跳轉微信小程序報錯完美的解決方案

一、報錯&#xff1a; [WXTAG] [JSCORE] The slot <template> or <script type"text/wxtag-template"> of <wx-open-launch-weapp> is missing 二、源碼 官方源代碼如下&#xff0c;<script type"text/wxtag-template"></sc…

美團外賣搜索基于Elasticsearch的優化實踐--圖文解析

美團外賣搜索基于Elasticsearch的優化實踐–圖文解析 前言 美團在外賣搜索業務場景中大規模地使用了 Elasticsearch 作為底層檢索引擎&#xff0c;隨著業務量越來越大&#xff0c;檢索速度變慢了&#xff0c;CPU快累趴了&#xff0c;所以要進行優化。經過檢測&#xff0c;發現…

gcop:簡化 Git 提交流程的高效助手 | 一鍵生成 commit message

&#x1f496; 大家好&#xff0c;我是Zeeland。Tags: 大模型創業、LangChain Top Contributor、算法工程師、Promptulate founder、Python開發者。&#x1f4e3; 個人說明書&#xff1a;Zeeland&#x1f4e3; 個人網站&#xff1a;https://me.zeeland.cn/&#x1f4da; Github…

[SAP ABAP] 數據字典

ABAP數據字典是定義和管理數據庫對象的工具 系統的所有全局數據類型以及數據庫表結構等都需要在數據字典中創建和維護(數據字典中的對象對所有ABAP程序都是全局的) 通過數據字典&#xff0c;我們可以把數據庫對象管理好&#xff0c;后續才能順利的進行功能開發&#xff0c;SA…

華為面試題及答案——大數據

(1)namenode內存滿了,如何進行擴容,調什么參數。 1. 增加 NameNode 的內存 在 hadoop-env.sh 文件中,可以增加 JVM 分配給 NameNode 的內存。通常是在 HADOOP_NAMENODE_OPTS 中增加 -Xmx 參數來增加最大堆內存。 export HADOOP_NAMENODE_OPTS="-Xmx8g -Xms4g ${HA…

集合,Collection接口

可動態保存任意多個對象&#xff0c;使用比較方便 提供了一系列方便操作對象的方法&#xff1a;add&#xff0c;remove&#xff0c;set&#xff0c;get等 使用集合添加刪除新元素&#xff0c;代碼簡潔明了 單列集合 多列集合 Collection接口 常用方法 List list new Arra…