web-dev-qa-db-ja.com

凝集性を維持しながら、ほとんど無関係なステップで大規模なアルゴリズムを実装する方法

説明したアルゴリズムに似たものを実装したい ここ 。ステップの多くはそれ自体がアルゴリズムであると考えられているため、「アルゴリズム」が正しい単語であるかどうかさえわかりません。このような状況で私が過去に行ったことは、各ステップをクラスのプライベートメソッドにカプセル化し、次に各ステップを順番に呼び出すパブリックメソッドを提供することです。しかし、これは凝集性の設計原理に違反しているように感じます。ステップが相互に関連する唯一の方法は、データを共有し、次々に呼び出されることです。これらの操作を相互に分離するデザインパターンはありますか?それとも、上記で説明した方法がこれにアプローチする唯一の方法ですか?

1
Gaston Gilbert

小さなメソッドの場合、設計は問題ないかもしれません。より大きなメソッドの場合、各ステップがアルゴリズム自体である場合は、各ステップを独自のクラスに配置します。クラスには1つのパブリックメソッドがあります。これにより、データフローを明示的にする必要があり、サブアルゴリズムごとに個別の単体テストを記述できます。

2
Doc Brown