Simulator
と呼ばれる単純なクラスを開発していましたが、これは特定の入力にSimulation
のリストを適用します。各入力に対して、シミュレーションは、各シミュレーションに関して入力が満たさなければならないいくつかの条件に基づいて、出力を生成するか否かを生成することができる。 Simulator
によって生成される結果は、出力のリストです。情報隠蔽と関数プログラミングのコーディングスタイル
ここにコードがあります。あなたが見ることができるように、入力がSimulation
で処理可能である場合
class Simulator {
final List<Simulation> simulations;
// Some initialization code...
List<Ouput> execute(Input input) {
return simulations
.stream()
.filter(s -> s.processable(input))
.map(s -> s.prepareOutput(input))
.collect(Collectors.toList());
}
}
、最初私はそれがされていないため、シミュレーションをフィルタリングして、入力にこれらのシミュレーションを適用し、確認してください。
オブジェクト指向の観点からは、Simulation
クラスの内部を公開しています。 processable
メソッドで行われたチェック操作は、prepareOutput
メソッド内に隠れているはずです。
Simulator
にはprocessable
が表示されていますが、私はより機能的なアプローチを適用でき、非常に便利です。
どのアプローチが良いですか?私は行方不明の他の解決策はありますか?
Optional<Output> prepareOutput(Input input) {
boolean isProcessable = processable(input); // processable is private
if(isProcessable){
// prepare Output
return Optional.of(Output);
}
return Optional.empty();
}
そして、このような何か:あなたはprocessable
を非表示にする必要がある場合は
あなたが内部を公開していると思うなら、なぜそれをやるのですか?他のいくつかの質問について: 'someSimulation.prepareOutput(null)'を使ってシミュレーションを呼び出すとどうなりますか?それは処理可能なのでしょうか?または、私が 'prepareOutput'を、与えられたシミュレーションによって処理できない入力パラメータで呼び出すとどうなりますか?外部から加工性を知る必要がありますか?それは 'null'を返すのか、それとも例外をスローしますか? 'Optional'はオプションですか? – Roland