Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録
< anond:20251008120252 |[日記] >

2025-10-09

関数引数が多すぎるという理由Configクラスを作るのはアンチパターンなの?

いいえ、関数引数が多すぎる(「Too Many Arguments」)問題解決策としてConfigクラス(またはパラメータオブジェクト)を使用すること自体は、一般的アンチパターンとは見なされていません。

しろ、多くの場合で推奨されるプラクティスです。

Configクラスが推奨される理由

関数引数が多すぎる状態は「コード臭い(Code Smell)」の一つとされており、Configクラスなどの単一オブジェクト引数をまとめることは、その問題を軽減するための一般的解決策です。

メリット説明
可読性の向上 長い引数リストコードを読みにくくしますが、関連する引数を一つのオブジェクトにまとめることで、関数シグネチャ定義)が簡潔になり、何を受け取っているのかが明確になります
引数の順序間違いの防止位置引数が多いと、呼び出し側で引数の順番を間違えるリスクが高まりますオブジェクトとして渡せば、プロパティ名でアクセスするため、この種のエラーを防げます
変更容易性の向上 新しい引数必要になった場合関数シグネチャを直接変更する代わりに、Configクラスに新しいプロパティを追加するだけで済みます。これにより、関数の呼び出し元すべてを変更する必要がなくなり、マージの競合も減らせます
引数グループ化・関連付け論理的に関連する引数(例:`name`, `lastname`, `city`, `country` → `Address`オブジェクト)をまとめることで、その意図コンテキストが明確になります

このような引数をまとめるためのオブジェクトは、Data TransferObject (DTO) やParameterObjectとも呼ばれます

潜在的アンチパターンになるケース(注意点)

Configクラス自体問題なのではなく、そのクラス使用方法や、そもそも引数が多いという事実がより深い設計上の問題を示している場合があります

1. 「やりすぎているクラス」の兆候

引数が多い関数は、しばしば単一責任原則(Single Responsibility Principle / SRP)に違反している大きなクラス(Large Class)や長いメソッド(Long Method)の兆候であることがあります

Configクラスを作っても、根本的な問題解決しない:引数クラスにまとめただけで、関数クラスが多くの異なる責任を持ちすぎているという根本的な問題解決しません。

対処法: この場合Configクラス作成する前に、関数が実行している処理をより小さな責任を持つ複数関数クラスに分割することを検討すべきです。

2.Configクラスが膨大すぎる

Configクラス自体が、もはや数十のフィールドを持つ巨大な「すべてを持つクラス」になってしまっている場合、それは設計上の問題です。

対処法: その巨大なConfigクラスフィールドを、論理的なサブグループ(例: `DatabaseConfig`, `NetworkConfig`, `LoggingConfig`など)に分割することを検討します。

3. 不必要な複雑さの追加

引数が数個(例: 2~3個)しかない関数に対して、引数をまとめるためだけにConfigクラス作成すると、不必要オーバーヘッドと複雑さが増すだけで、メリットが薄い場合があります

対処法:Configクラス使用は、引数の数が多すぎて(一般的に5個以上が目安とされることが多い)管理が難しくなった場合限定するのが賢明です。

まとめ

結論として、関数引数が多すぎる問題Configクラス解決するのは、有効設計パターンです。

ただし、その解決策を適用する前に、「なぜこの関数はこんなに多くの情報必要なのか?」と自問し、それがより大きな設計上の問題(SRP違反など)の単なる症状ではないか確認することが、クリーンコードを書く上で最も重要です。

Permalink |記事への反応(0) | 06:48

このエントリーをはてなブックマークに追加ツイートシェア

記事への反応 -

記事への反応(ブックマークコメント)

全てのコメントを見る

人気エントリ

注目エントリ

ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp