C# で非常に並列なアプリケーションを作成する場合、次のように非常に小さいものを作成する方がよいでしょうか?
20 の小さなクラス、40 の大きなクラス、合計で 60 のクラス、合計 120 のクラス
または巨大なのような:
これらの 60 個のクラスを個別に作成します (まだ再利用性を念頭に置いています)。
したがって、#2 では、これらの 60 個のクラスに、他のクラスの代わりに何かを行うためのメソッドを含めることができます。
C# で非常に並列なアプリケーションを作成する場合、次のように非常に小さいものを作成する方がよいでしょうか?
20 の小さなクラス、40 の大きなクラス、合計で 60 のクラス、合計 120 のクラス
または巨大なのような:
これらの 60 個のクラスを個別に作成します (まだ再利用性を念頭に置いています)。
したがって、#2 では、これらの 60 個のクラスに、他のクラスの代わりに何かを行うためのメソッドを含めることができます。
抽象的には、これらのアプローチのどちらも違いはありません。
具体的には、変更可能な状態を最小限に抑えると、アプリケーションがより並列化可能になります。オブジェクトのインスタンスの状態を変更するたびに、スレッド セーフの問題が発生する可能性があります (複雑性またはバグのいずれか。少なくとも 1 つを選択してください)。Parallel LINQ や並列処理を強調する関数型言語を見てみると、クラスの設計は、状態の変更を回避するという規律よりも重要ではないことがわかります。
クラスの設計はあなたの正気のためです。疎結合コードは、より正気になります。不変オブジェクトにより、並列性が向上します。必要に応じて組み合わせる。
ピースが小さいほど、テスト、リファクタリング、保守が容易になります。
クラスのサイズではなく、結合の範囲が重要です。
並列アプリケーションでは、多くのプロパティを持つオブジェクトよりも、「値オブジェクト」と呼ばれることもある不変オブジェクトを優先する必要があります。新しい値をもたらす操作を適用する必要がある場合は、結果として新しいオブジェクトを作成するだけです。
関心事の適切な分離を観察し、プログラムの概念を表す自然数のクラスに導きましょう。ObjectMentor の Robert Martin によってカタログ化され普及された SOLID 原則をお勧めします。(これで、リストを見つけるのに十分な Google の餌食になるはずです!)
最後に、System.Threading と System.Collections の両方に慣れることもお勧めします。ほとんどのコレクションは本質的にスレッド セーフではなく、同期を正しく行うのは難しいことで知られています。したがって、広く使用され、テスト済みで信頼性の高い同期プリミティブを使用することをお勧めします。