ウィキペディアによると
「ソフトウェアエンティティ(クラス、モジュール、関数など)は拡張のために開かれている必要がありますが、変更のために閉じられている必要があります」
関数という言葉が目を引きましたが、メソッドのオーバーロードを作成することは、オープン/クローズの原則の一例とみなすことができると思いますか?
例を説明しましょう。サービスレイヤーにメソッドがあり、ほぼ1000か所で使用されていることを考慮してください。メソッドはuserIdを取得し、ユーザーが管理者であるかどうかを判断します。
bool IsAdmin(userId)
ここで、userIdではなくユーザー名に基づいて、ユーザーが管理者であるかどうかを判断する必要があると考えてください。上記のメソッドのシグネチャを変更すると、1000箇所でコードが破損します(関数は修正のために閉じる必要があります)。したがって、ユーザー名を取得するオーバーロードを作成し、ユーザー名に基づいてuserIdを見つけ、元のメソッドを見つけることができます。
public bool IsAdmin(string username)
{
int userId = UserManager.GetUser(username).Id;
return IsAdmin(userId);
}
このように、オーバーロードを作成して機能を拡張しました(機能は拡張に対して開かれている必要があります)。
それはオープン/クローズド原則の例ですか?