単一のメソッドでクエリを実行しているデータがいくつかあります。矢じりのアンチパターンになるところまで来ています。次のようになります。
void queryData()
{
int masterIndex = getMasterIndex();
if (masterIndex != -1)
{
byte[] pageData = getMasterPage(masterIndex);
if (pageData) != null)
{
Item1 i1 = getItem1(pageData);
Item2 i2 = getItem2(pageData);
if (i1 != null && i2 != null)
{
showResults(i1, i2);
}
}
}
}
上記を想像してみてください。より多くの if ステートメントと、呼び出される各メソッドには、適切な量のロジックが含まれています。
今私ができることは、上記のメソッドをリファクタリングして、すべての if ステートメントが肯定的で、true の場合は早期に返すことです。
ただし、各クエリと有効性チェックを独自のクラスに分割する方がクリーンだと思います。各アクションは、次のようなインターフェースを継承/実装します。
public interface Action
{
public void run();
public boolean wasSuccessful();
}
必要なアクションのリストを作成し、一度に 1 つずつ実行します。このようにして、各アクションに属するロジックが明確になります。
これは過剰に設計されていますか?上記は私がまだ知らない既存のパターンですか?
前もって感謝します。