1

ウィザードのような機能を備えたサイトを作成するために使用している非常に大きな (77 アクション) コントローラーがあります。このサイトは、管理コンポーネントやエンドユーザー コンポーネントなどの複数のコンポーネントを備えた「ジョブ アプリケーション マネージャー」のようなものです。私が扱っているコンポーネントは、ユーザーが実際に求人応募に記入する部分です。他のコンポーネントで物事が構造化されている方法では、すべてのジョブアプリケーションを同じコントローラーに配置するのが最も理にかなっています。これらのアクションはすべて似たようなことを実行しますが、次のようにモデルが異なります。

public class ExampleController : Controller
{
    public ActionResult Action1() 
    {
        Guid appId = new Guid(Session["AppId"].ToString());
        ... // logic to pull up correct model
        return View(model)
    }

    [HttpPost]
    public ActionResult Action1(FormCollection formValues)
    {
        Guid appId = new Guid(Session["AppId"].ToString());
        ... // logic to update the model
        return RedirectToAction("Action2");
    }

    public ActionResult Action2()
    {
        Guid appId = new Guid(Session["AppId"].ToString());
        ... // logic to pull up the correct model
        return View(model)
    }

    ... // on and on and on for 74 more actions
}

アクションのすべてにある一定の冗長性の一部を減らす方法はありますか? これが私が考えていることです:

  • メンバー変数 Guid を作成して appId を格納し、OnActionExecuting をオーバーライドしてこの変数を設定します。これは良い考えですか?
  • アクションの数を減らすために、ある種のページングを実装します。それを行う方法に関する提案はありますか?
4

4 に答える 4

2

私はあなたの最初のポイントには「はい」と言い、2番目のポイントには「場合によります」と言います。メソッドがたくさんあるという理由だけでデザインを変更しないでくださいActionResult

メンバー変数を使用してオーバーライドOnActionExecutingすることは、その appID Guid コードを 1 つの場所にリファクタリングするための優れた方法のように思われるため、後ですばやく簡単に変更できます。

于 2012-07-23T23:58:33.470 に答える
1

通常、ウィザードビューの場合、単一のアクションとページが複数のdivで使用され、手順に従って表示できます。

たとえば、4つのステップを持つ登録ウィザード画面は、各ステップのdivを含む単一のページで処理できます。JavaScriptとcssを利用して、ウィザードフローにすることができます。

手順の合間に必要に応じて、ajaxを使用してさまざまなモデルを更新します。

于 2012-07-24T07:44:23.053 に答える
0

別のオプションは、これを置き換えることができます..

Guid appId = new Guid(Session["AppId"].ToString());

..次のような呼び出しを使用します。

private Guid GetAppId(){
    return new Guid(Session["AppId"].ToString());
}

GetAppId()現在使用している場所ならどこでも代わりに使用できるようになりappIdました。もちろん、お勧めのようにクラス変数の形式で GUID をキャッシュすることもできますが、その変数へのアクセスと使用をこのようなメソッドに制限することをお勧めします (メソッドを介して値を取得します)。後で何かを変更したい場合に備えて、もう少し柔軟になるかもしれません。

ページをいくつかのページに分割することについて; 確かに、それが理にかなっていて、正しいと感じるなら、先に進んでください。1 つのクラスで 70 を超えるアクションが多いように思えます。ただし、それらをそこに保持する方が理にかなっている場合は、メソッド自体からできるだけ多くのロジックを移動して、代わりにヘルパー クラスに移動することを試みることができます。私は常にアクションを可能な限り小さく保ち、ロジックを個別のクラスに配置して、それぞれが 1 つの特定のことを実行するように調整するようにしています。

要点は、各アクションが 2 ~ 4 行以下であれば、70 以上のアクションは必ずしも問題ではないということです。

于 2012-07-24T10:33:36.297 に答える
0

ロジック (ジョブ マネージャー関連) を単一のリポジトリ/マネージャー クラスに配置することができます。異なるビューに関連付けられた異なるコントローラー (例: AdminController、EndUserController など) は、同じリポジトリ/マネージャー クラスからメソッドを呼び出すことができます。

于 2012-07-24T07:54:11.997 に答える