【軟體】重構與架構

来源:https://www.cnblogs.com/yyyyfly1/archive/2022/03/19/16026110.html
-Advertisement-
Play Games

博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...


什么是重构

重构是指在不改变代码行为的前提下,重写代码,使其更加简洁,易于服用

这是核心技能,并且经常我们在自己没有意识到的情况下使用

什么是软件架构

就像生物一样,软件系统通常由很多较小的部件组成,每个部件擅长做一件事。将这些部件组合起来,一起工作,可形成更大的软件系统。术语软件架构用来描述软件项目的各个不同部件之间的组合方式。

笔者的理解就是软件架构就是在拼装高达

优秀架构是可预测的

软件架构可预测是指可以对软件的工作方式和结构做出准确的假设。可预测性表明预先的规划是合理的,并有助于节省开发时间,因为可以避免下列问题:

  • 组件的功能是什么
  • 某一段代码在何处
  • 新代码加到何处

在可预测的架构中,人们可以做出精确的假设,不熟悉代码的开发人员也能够更快地理解该架构。

优秀架构可提升代码复用性

代码复用是指在多处使用同一代码而无需重写。代码复用优势明显,不用重写已有代码,可以加快开发速度。同理,解决某一问题所需的代码越少,维护所有用该代码实现的功能
所需的时间就越少。

优秀架构可扩展

跟可扩展性非常类似,可维护性对于架构也很重要。对于可维护的优秀架构,修改其现有功能很容易。随着时间的推进,需求也许会发生变化。迫于需求变动的压力,你将修改代
码。可维护性软件是指你修改一处代码时,没必要大规模改动其他代码。

软件架构和重构

重构有助于维护和提升软件架构。

重构就是指调整代码结构、使其更具意义的一套技术。重构可使代码可预测、可复用、可扩展和可维护。

当你的软件架构具备了上述特点时,它对目标用户而言将更可靠,你在其上继续开发也会更加愉快!

需要重构的原因

  1. 需求变更
  2. 架构设计不合理
  3. 低估困难
  4. 忽视最佳实践

什么情况下应该重构代码

结合代码的上下文重构代码会更加容易。

因此,如果你修复的 bug 或开发的新功能用到了已有代码,重构是最好的选择。

处理小任务时顺便重构代码,不至于把一切搞乱,他人若修改你重构过的代码也能从中受益。

不断坚持重构代码,代码质量将达到卓越,前提是你的改动符合优秀架构的特点。

然而,有时你会遇到一段有很多依赖的代码,也许需要决定是否对其重构。

重构有很多依赖的代码,就像抽衣服上的线:抽得越多,散开得越多。

类似地,对于具有很多依赖的代码,你改动得越多,需要更新的依赖就越多。

遇到这种情况,如果时间很紧,先把工作完成也许更适合,然后再匀出些时间,回头审视并重构代码。

然而,如果开发过程中重构某些小功能不至于严重影响到开发计划,你也许可以考虑及时重构它们。

什么情况下不应该重构代码

知道什么情况下不应该重构,甚至比知道什么情况下应该重构更为重要。

重构名声不太好,因为有时看起来软件开发人员只是为了重写而重写。

代码也许是别人写的,没必要重构,但患有“不是我写的症”的开发人员一定要对其重构,因为他们认为不是自己写的代码就不是好代码。

或者,有一天开发人员心血来潮,不再喜欢之前的代码编写方法(也许之前类名使用下划线而不是连字符,现在想改过来),因此他们钻入重构的兔子洞以求止痒。

很多情况下,这些工作被视为“磨洋工”,它让人们感觉效率很高,事实上并非如此。

在黑夜里梦想着光,心中覆盖悲伤,在悲伤里忍受孤独,空守一丝温暖。 我的泪水是无底深海,对你的爱已无言,相信无尽的力量,那是真爱永在。 我的信仰是无底深海,澎湃着心中火焰,燃烧无尽的力量,那是忠诚永在
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 面對五花八門的開發板不知道該怎麼選取?晶元、模組、開發板傻傻分不清?如何使用代碼控制開發板?本期,我們將一一為你解答。 ...
  • 什麼是動態標簽管理? 動態標簽管理(Dynamic Tag Manager,簡稱“DTM”),可讓開發者快速配置更新測量代碼及相關代碼片段,可以基於Web界面輕鬆地進行分析、測量代碼的配置,完成特定事件動態跟蹤並將數據傳送給第三方分析平臺,實現營銷數據隨需跟蹤。本期我們向大家介紹:如何從零開始集成D ...
  • 配置好 renren-fast 腳手架,學習完 Spring MVC 架構後,我需要具體調試 renren-fast 的介面,比如要新增某個介面。 什麼是前後端分離 運行 renren-fast 項目時,我們訪問 http://localhost:8080/renren-fast/ 的結果: 可以看 ...
  • 現代軟體開發和以前的軟體開發有很大的不同,以前軟體一般都會根據業務流程,設計程式的入口和程式的出口,即軟體耦合性很強。隨著軟體技術的不斷發展和DDD領域設計模型的不斷深入研究,在微服務化開發框架的大力推廣下,Docker技術和K8s 技術的普及,新一代的企業應用架構再次革新了軟體行業。 無論是軟體開 ...
  • 適配器模式是什麼 適配器模式(Adapter Design Pattern)適配器是一種結構型設計模式, 用來將不相容的介面轉換為相容的介面。適配器可擔任兩個對象間的轉換器, 它會接收對於一個對象的調用, 並將其轉換為另一個對象可識別的格式和介面。 為什麼用適配器模式 兩個對象直接由於格式或者介面不 ...
  • 裝飾器模式又叫包裝模式,數據結構型模式;是指在不改變現有對象結構的情況下,動態的給改對象增加一些職責(即增加其額外功能)的模式。 在星巴克咖啡店,有美式咖啡(LongBlack)、無因咖啡(Decaf)、義大利農咖啡(Espresso)等不同的咖啡種類,也可以添加牛奶(Milk)、豆漿(Soy)、巧 ...
  • 原型模式是什麼 原型模式是一種創建型設計模式, 使你能夠複製已有對象, 而又無需使代碼依賴它們所屬的類。 為什麼要用原型模式 可以幫助我們優雅地創建對象的拷貝。在這種設計模式裡面,將克隆某個對象的職責交給了要被克隆的這個對象。被克隆的對象需要提供一個clone()方法。通過這個方法可以返回該對象的拷 ...
  • 生成器模式是什麼 生成器模式也叫做建造者模式,是一種創建型的設計模式, 使你能夠分步驟創建複雜對象。 為什麼要用生成器模式 假設有這樣一個複雜對象, 在對其進行構造時需要對諸多成員變數和嵌套對象進行複雜的初始化工作。這些初始化代碼通常深藏於一個包含眾多參數且讓人基本看不懂的構造函數中。而且在很多時候 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...