0

数値問題を解くメインクラスがあるという問題があります。簡単にするために、 を解くと仮定しAx=bます。今、私はユーザーがそれを解決する方法を選択できるようにしたいと考えています。何千ものオプションがあり、各オプションには何千ものオプションがあります。

私のアイデアは、次のように設計することでした: メインクラスを作成してから、各メソッドのサブクラスと各メソッドの詳細のサブサブクラスを作成します (継承を介して相互作用する可能性があります)。

たとえば、ユーザーが次のようなことをすることを想定しています。 Model.method='CG' Model.preconditioning=offそして Model.SolveModelクラスには、CG実行されるサブクラスがあります。その中には、前提条件のオンまたはオフに応じて実行さCGれるメソッドCG_Precondとメソッドがあります。CG_NoPrecond(方法が大きく異なると仮定します)。したがって、本質的に、ユーザーは を実行していModel.CG.CG_NoPrecondます。

これは良いデザインですか?ネストされたクラスは避けるべきですか?

重要な注意事項の 1 つは、Modelクラス以外のすべてのサブクラスにはメソッドのみが含まれ、独自のデータ (返されるもの以外) は含まれないことです。

SOに関するいくつかの本当に美しい回答を読むのに時間を費やしましたが、私の問題(私は信じています)は、.netでネストされたクラスを使用する必要がある理由/時期の受け入れられた回答の要件と一致していますか? それともすべきではありませんか?.

4

1 に答える 1

0

まず、クラスSolverを作成し、戦略パターンを使用して、問題を解決するためのさまざまな方法を表すサブクラスを作成する必要があります。

オプションとサブオプションは、正しく行うのが難しいものです。私があなたを正しければ、CG_Precondとは a のサブクラス ( のサブクラスでもあります)CG_NoPrecondである必要があります。これらは内部ロジックを共有しているように見えるからです。CGSolver

オプションが、各メソッドが他の値と値のタイプを必要とするさまざまなメソッドの定義済みの値のようなものである場合、より困難になります。そこで、オプション、サブオプションなどの例をいくつか提示していただきたいと思います。

于 2013-09-01T19:36:08.847 に答える