JavaScript の単一責任原則を理解する
クリーンで保守しやすいコードを作成する場合、従うべき最も重要な原則の 1 つは単一責任原則 (SRP) です。これはソフトウェア開発における 5 つの SOLID 原則の 1 つであり、コードの読み取り、テスト、変更が容易になります。
ロバート・C・マーティンによる単一責任原則では次のように述べられています。
クラスまたは関数には、変更する理由が 1 つだけある必要があります。
もっと簡単に言うと、コードの各単位 (関数、クラス、モジュールなど) は、1 つのことを実行し、それを適切に実行する責任を負う必要があります。責任が分離されると、コードの 1 つの領域の変更が他の領域に予期せず影響を与えることがなくなり、バグのリスクが軽減され、アプリケーションの保守とテストが容易になります。
SRP がないと、次のような問題に直面する可能性があります。
JavaScript で SRP を適用する実際の例をいくつか見てみましょう。
希望小売価格なし
function handleUserLogin(userData) { // Validate user data if (!userData.email || !userData.password) { logger.error("Invalid user data"); return "Invalid input"; } // Authenticate user const user = authenticate(userData.email, userData.password); if (!user) { console.error("Authentication failed"); return "Authentication failed"; } // Log success console.info("User logged in successfully"); return user; }
この関数は、検証、認証、ログ記録など、多くのことを行います。これらにはそれぞれ明確な責任があります。
希望小売価格あり
より小さな単一目的の関数に分割することで、リファクタリングできます。
function validateUserData(userData) { if (!userData.email || !userData.password) { throw new Error("Invalid user data"); } } function authenticateUser(email, password) { const user = authenticate(email, password); // Assume authenticate is defined elsewhere if (!user) { throw new Error("Authentication failed"); } return user; } function handleUserLogin(userData, logger) { try { validateUserData(userData); const user = authenticateUser(userData.email, userData.password); logger.info("User logged in successfully"); return user; } catch (error) { logger.error(error.message); return error.message; } }
各関数が単一の責任を持つようになり、テストと変更が容易になりました。
希望小売価格なし
複数の懸念事項を管理するクラス:
class UserManager { constructor(db, logger) { this.db = db; this.logger = logger; } createUser(user) { // Save user to DB this.db.save(user); this.logger.info("User created"); } sendNotification(user) { // Send email emailService.send(`Welcome, ${user.name}!`); this.logger.info("Welcome email sent"); } }
ここでは、UserManager がユーザーの作成、ログ記録、電子メールの送信を処理します。責任が多すぎます。
希望小売価格あり
他のクラスまたはモジュールに責任を委任してリファクタリングします:
class UserService { constructor(db) { this.db = db; } createUser(user) { this.db.save(user); } } class NotificationService { sendWelcomeEmail(user) { emailService.send(`Welcome, ${user.name}!`); } } class UserManager { constructor(userService, notificationService, logger) { this.userService = userService; this.notificationService = notificationService; this.logger = logger; } createUser(user) { this.userService.createUser(user); this.notificationService.sendWelcomeEmail(user); this.logger.info("User created and welcome email sent"); } }
各クラスは、永続性、通知、またはログという単一の関心事に焦点を当てています。
単一責任の原則は、クリーンなコードの基礎です。すべての関数、クラス、またはモジュールを変更する理由が 1 つだけになるようにすることで、JavaScript コードがよりモジュール化され、テストと保守が容易になります。
小規模から始めてください。現在のプロジェクトから複雑な関数またはクラスを 1 つ選択し、SRP を使用してリファクタリングします。時間が経つにつれて、これらの小さな変更はコードベースの大幅な改善につながります。
以上がJavaScript における単一責任の原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。