在各種諮詢專案中,我最近注意到同樣的事情不斷重複:叢集程式碼。我這麼說是什麼意思?好吧,讓我這樣說吧。當你編碼時,你應該考慮乾淨的程式碼。是的,我知道,又有一個人在談論乾淨的程式碼。為什麼要聽我的?從 12 歲起,我就對電腦及其運作方式感興趣。當我 15 歲時,我開始觀看 Pluralsight,這是一堆關於如何進行 MVVM、MVC、架構等的影片。我看了很多視頻,但我還不知道如何編程。我跟著做了,但我記得很多事情都不明白。
在過去的幾年裡,我一直在多家公司擔任架構師和高級軟體開發人員。我的背景是電腦工程和 IT 學徒。正如你們所知,我試著與你們分享我所知道的事情,以幫助人們,同時也像 LinkedIn 上的所有人一樣獲得曝光。是的,他們並不像你想像的那麼熱愛寫作;這純粹是一種商業模式。但這並不重要,對吧?所以就這樣了。希望有一天您會購買我的一款產品。 ;)
現在,讓我告訴你我最近在不同項目中看到的情況。我認為乾淨的程式碼並不總是被應用的原因並不一定是因為人們不具備相關知識。這通常與嚴格的期限和來自不同項目的壓力有關。如果您是像我一樣的軟體工程師或專案經理,您就會知道專案的成功需要一定的限制和時間壓力。
為了交付給客戶,即使在內部工作,您也會面臨截止日期和不同的利害關係人。公司通常採用訂閱模式運營,客戶定期期待新功能。這帶來了很多挑戰。開發人員和專案規劃者需要讓專案繼續前進,而不要陷入架構債務的陷阱,因為他們沒有足夠的時間來正確思考解決方案。
一旦出現問題,就很難回頭解決它。根據我的經驗,人們不會經常回去重構他們的計畫——至少我認識的人不會。如果您有不同,請告訴我。你可以做很多事情來重構,這很有幫助,但問題是它沒有優先考慮。如果程式碼可以工作並且客戶滿意,那麼重構就不是首要任務。但讓我們想想未來兩三年。一旦程式碼變得越來越集群會發生什麼?
你最終可能會僱用很多開發人員將單體架構改造成微服務架構,這會花費很多錢。這就是為什麼你應該考慮乾淨的程式碼——不僅僅是當你開始一個專案時,不僅僅是當你醒來時,而是一直如此。因為如果你不應用它,最終它會回來咬你。
整潔程式碼的實用策略
一致的程式碼審查
定期代碼審查可確保遵守編碼標準並及早發現潛在問題。
自動化測試
實施自動化測試,包括單元測試、整合測試和端到端測試,有助於在問題投入生產之前發現問題。
定期重構
在專案計劃中留出時間專門用於重構,以防止技術債累積並保持程式碼庫的可維護性。
採用堅實的原則
SOLID 原則(單一職責、開閉式、里氏替換、介面隔離和依賴倒置)為編寫乾淨且可維護的程式碼提供了一個框架。
清晰的文件
編寫清晰簡潔的文件可以幫助新開發人員更快地理解程式碼庫並減少引入錯誤的可能性。
結對程式設計
結對程式設計允許兩個開發人員一起處理相同的程式碼,儘早發現錯誤並在團隊成員之間共享知識。
乾淨程式碼的長期好處
降低維修成本
乾淨的程式碼更容易維護,減少修復錯誤和實現新功能所花費的時間和金錢。
增強可讀性和可理解性
乾淨的程式碼庫更容易閱讀和理解,對於新開發人員的入職和專案的長期可持續性至關重要。
效能提升
結構良好的程式碼可以避免不必要的複雜性並優化資源使用,從而帶來更好的效能。
更高的可擴充性
乾淨的程式碼可以更輕鬆地擴展應用程序,簡化添加新功能和適應不斷變化的需求的過程。
提高開發者滿意度
使用乾淨的程式碼可以減少開發人員的挫折感並提高工作滿意度,從而提高生產力並降低流動率。
亂碼範例
<?php class User extends security\Session { protected $app; public function __construct($app) { $this->app = $app; } public function addSkill(Application $app, Request $request) { $userInput['id'] = $request->request->get('id', null); $userInput['id'] = preg_replace("/[^0-9,.]/", "", $userInput['id']); $app['checkpoint']->minimumRole(1); $user = $app['session']->get('user', []); $userId = $user['profile']['easyJobAddressId']; if ($userInput['id'] === null) { return $app->json(['ok' => true]); } $app['dbs']['appMySql']->insert('skills', [ 'skillId' => $userInput['id'], 'userId' => $userId, 'rank' => 0 ]); return $app->json(['ok' => true]); } }
重構程式碼
重構後的程式碼透過分解職責、使用依賴注入並遵循 SOLID 原則來遵守乾淨程式碼原則。
依賴注入與建構子
public function __construct( UserRoleService $userRoleService, RequestStack $requestStack, UserRepository $userRepository, EasyJobServiceInterface $easyJobService, SkillsRepository $skillsRepository, AppDataService $appDataService ) { $this->userRoleService = $userRoleService; $this->requestStack = $requestStack; $this->userRepository = $userRepository; $this->easyJobService = $easyJobService; $this->skillsRepository = $skillsRepository; $this->appDataService = $appDataService; }
透過注入依賴項,我們確保每個類別都有單一的職責,並且可以輕鬆測試和維護。
增加技能的單一職責
#[Route('/profile/experience/add', name: 'profile_experience_add', methods: ['POST'])] public function addExperience(Request $request): JsonResponse { $this->denyAccessUnlessGranted('ROLE_USER'); $skillId = $request->request->get('id'); if (!is_numeric($skillId)) { return $this->json(['status' => 'error', 'message' => 'Invalid skill ID']); } $userId = $this->getUser()->getId(); $result = $this->appDataService->addSkillToUser($userId, (int) $skillId); return $this->json(['status' => 'ok', 'added' => $result]); }
這裡,我們使用專門的方法來處理技能的添加。它確保驗證並遵循乾淨、簡潔的結構。
關注點分離
public function index(): Response { $user = $this->getUser(); $userId = $user->getId(); $allSkills = [90, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31]; $skills = array_fill_keys($allSkills, 0); $userSkills = $this->appDataService->getSkillsByUserId($userId); foreach ($userSkills as $skill) { $skillId = $skill->getSkillId(); if (array_key_exists($skillId, $skills)) { $skills[$skillId] = 1; } } }
注意我們如何使用appDataService來解耦系統。
透過分離關注點,我們使每個方法專注於單一任務,使程式碼更易於閱讀和維護。
結論
總之,總是考慮乾淨的程式碼。現在看起來可能並不緊急,但忽視它可能會導致嚴重的問題。優先考慮乾淨的程式碼將在未來節省時間、金錢和麻煩。定期重構並遵守編碼標準是維護健康程式碼庫的關鍵。請記住,您今天為編寫乾淨程式碼所付出的努力從長遠來看將會得到回報,使您的專案更具可擴展性、可維護性並且工作起來更加愉快。
以上是為什麼乾淨的程式碼很重要的詳細內容。更多資訊請關注PHP中文網其他相關文章!