数値問題を解くメインクラスがあるという問題があります。簡単にするために、 を解くと仮定しAx=b
ます。今、私はユーザーがそれを解決する方法を選択できるようにしたいと考えています。何千ものオプションがあり、各オプションには何千ものオプションがあります。
私のアイデアは、次のように設計することでした: メインクラスを作成してから、各メソッドのサブクラスと各メソッドの詳細のサブサブクラスを作成します (継承を介して相互作用する可能性があります)。
たとえば、ユーザーが次のようなことをすることを想定しています。
Model.method='CG'
Model.preconditioning=off
そして Model.Solve
、Model
クラスには、CG
実行されるサブクラスがあります。その中には、前提条件のオンまたはオフに応じて実行さCG
れるメソッドCG_Precond
とメソッドがあります。CG_NoPrecond
(方法が大きく異なると仮定します)。したがって、本質的に、ユーザーは を実行していModel.CG.CG_NoPrecond
ます。
これは良いデザインですか?ネストされたクラスは避けるべきですか?
重要な注意事項の 1 つは、Model
クラス以外のすべてのサブクラスにはメソッドのみが含まれ、独自のデータ (返されるもの以外) は含まれないことです。
SOに関するいくつかの本当に美しい回答を読むのに時間を費やしましたが、私の問題(私は信じています)は、.netでネストされたクラスを使用する必要がある理由/時期の受け入れられた回答の要件と一致していますか? それともすべきではありませんか?.