最近、さまざまなコンサルティング プロジェクトで、クラスター化されたコードという同じことが繰り返されていることに気づきました。それはどういう意味ですか?さて、このように言いましょう。コードを作成するときは、きれいなコードについて考える必要があります。はい、わかります。クリーン コードについて話している人がもう 1 人います。なぜ私の言うことを聞く必要があるのですか?私は 12 歳の頃からコンピューターとその仕組みに興味を持っていました。 15 歳になったとき、MVVM、MVC、アーキテクチャなどの方法に関する大量のビデオである Pluralsight を見始めました。たくさんのビデオを見ましたが、プログラミングの方法はまだ知りませんでした。私もついていきましたが、何が起こっているのかあまり理解できなかったのを覚えています。
ここ数年、私はさまざまな企業でアーキテクトおよび上級ソフトウェア開発者として働いてきました。私の経歴はコンピュータ エンジニアリングと IT 実習です。そして、皆さんご存知のとおり、私は人々を助けるためだけでなく、LinkedIn にいるすべての人々と同じように露出を得るために、私が知っていることを皆さんと共有しようとしています。そう、彼らはあなたが思っているほど書くことが好きではないのです。それは純粋にビジネスモデルです。でもそんなことは関係ないですよね?それでは、これで終わります。いつか私の製品を購入していただければ幸いです。 ;)
それでは、私が最近さまざまなプロジェクトで見たことをお話しましょう。クリーンなコードが常に適用されない理由は、必ずしも人々に知識がないからではないと思います。それは多くの場合、厳しい締め切りやさまざまなプロジェクトからのプレッシャーに関するものです。あなたが私のようなソフトウェア エンジニア、またはプロジェクト マネージャーであれば、プロジェクトを成功させるためには一定の制約と時間のプレッシャーがあることをご存知でしょう。
クライアントに納品するには、社内で作業している場合でも、納期やさまざまな関係者に直面する必要があります。企業は多くの場合、顧客が定期的に新機能を期待するサブスクリプション モデルで運営されています。これにより、多くの課題が生じます。開発者とプロジェクト プランナーは、解決策を適切に検討する十分な時間がなかったため、アーキテクチャ上の負債の罠に陥ることなく、プロジェクトを進め続ける必要があります。
一度その問題が発生すると、戻って修正するのは非常に困難です。私の経験から言えば、少なくとも私が知っている人たちは、自分のプロジェクトに戻ってリファクタリングすることはあまりありません。違う場合は教えてください。リファクタリングにはさまざまなことができ、非常に役立ちますが、問題は、優先順位が付けられていないことです。コードが機能し、クライアントが満足している場合、リファクタリングはリストの一番上にありません。しかし、2、3 年先のことを考えてみましょう。コードがますますクラスタ化されると何が起こるでしょうか?
モノリシック アーキテクチャをマイクロサービス アーキテクチャに全面的に改修するには、多くの開発者を雇うことになる可能性があり、それには多額の費用がかかります。これが、プロジェクトを開始するときだけでなく、朝起きたときだけでなく、常にクリーンなコードについて考える必要がある理由です。なぜなら、塗らなければ、いつかまた刺さってくるからです。
クリーンなコードのための実践的な戦略
一貫したコードレビュー
定期的なコードレビューにより、コーディング標準への準拠が保証され、潜在的な問題を早期に発見できます。
自動テスト
単体テスト、統合テスト、エンドツーエンド テストなどの自動テストを実装すると、本番環境に導入する前に問題を特定するのに役立ちます。
定期的なリファクタリング
技術的負債の蓄積を防ぎ、コードベースを保守可能に保つために、プロジェクトのスケジュールにリファクタリング専用の時間を確保してください。
堅実な原則の採用
SOLID 原則 (単一責任、オープン/クローズ、リスコフ置換、インターフェース分離、依存関係反転) は、クリーンで保守可能なコードを作成するためのフレームワークを提供します。
明確なドキュメント
明確で簡潔なドキュメントを作成すると、新しい開発者がコードベースをより早く理解できるようになり、エラーが発生する可能性が減ります。
ペアプログラミング
ペア プログラミングを使用すると、2 人の開発者が同じコードで共同作業し、間違いを早期に発見し、チーム メンバー間で知識を共有できます。
クリーンコードの長期的なメリット
メンテナンスコストの削減
クリーンなコードは保守が容易で、バグの修正や新機能の実装に費やす時間と費用が削減されます。
読みやすさとわかりやすさの向上
クリーンなコードベースは読みやすく理解しやすく、新しい開発者のオンボーディングやプロジェクトの長期的な持続可能性にとって非常に重要です。
パフォーマンスの向上
適切に構造化されたコードは、不必要な複雑さを回避し、リソースの使用を最適化することにより、パフォーマンスの向上につながります。
優れたスケーラビリティ
クリーンなコードにより、アプリケーションのスケーリングが容易になり、新しい機能を追加し、要件の変化に適応するプロセスが簡素化されます。
開発者の満足度の向上
クリーンなコードを使用すると、開発者のフラストレーションが軽減され、仕事の満足度が向上し、生産性の向上と離職率の低下につながります。
乱雑なコードの例
<?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 を使用してシステムを分離する方法に注目してください。
関心事を分離することで、各メソッドが 1 つのタスクに集中できるようになり、コードが読みやすく、保守しやすくなります。
結論
結論として、常にクリーンなコードについて考えてください。今は緊急ではないと思われるかもしれませんが、無視すると将来的に重大な問題につながる可能性があります。クリーンなコードを優先することで、将来の時間、コスト、頭痛の種を節約できます。定期的にリファクタリングを行い、コーディング標準に準拠することが、健全なコードベースを維持するための鍵となります。クリーンなコードを書くために今日費やした努力は長期的には報われ、プロジェクトのスケーラビリティと保守性が向上し、作業が楽しくなるということを覚えておいてください。
以上がクリーンなコードが重要な理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。