3

これは新しいアプリケーションで、Search コントローラーに index メソッドがあります。これはアプリケーションのホームページとしても機能し、デザイン パターンの観点から間違った道を進んでいるかどうかを判断しようとしています。

このメソッドはすでに 35 行の長さです。メソッドの機能は次のとおりです。

階層データのどの「レベル」を検索するかを決定するための 3 行の設定変数。

サブドメインがリクエストに含まれているかどうかに基づいて、いくつかのビュー変数を入力するための別の 10 行。

以下に基づいて 2 つのページのいずれかにリダイレクトする 10 行のセクション:

1) ユーザーがアクセス権を持っておらず、サインインしていて、まだアクセスをリクエストしていない場合は、「このブランドへのアクセスをリクエストするには、ここをクリックしてください」と伝えます。

2) ユーザーがアクセス権を持っておらず、サインインしており、既にアクセス権を要求している場合は、「あなたの要求を確認しています」と伝えます。

動的アレルを構築するためにさらに 10 行。

これらの懸念事項をどのように分離するか、または分離する必要があるかどうかさえ、頭の中ではっきりと理解できません。あなたが提供できる助けに感謝します!

4

3 に答える 3

1

それは多くの変数が設定されていることです。たぶん、これはある種のモジュールの良い機会ですか?おそらく、モジュールは、これらの多くの変数のラッパーとして機能するだけでなく、これらの決定の多くを行うことができます。申し訳ありませんが、これ以上具体的な答えはありません。

于 2010-10-26T14:56:53.867 に答える
1

あなたのコードがなければ、実際の修正を提案するのはやや難しいですが、それは間違いなく本当に間違ったアプローチのように聞こえ、必要以上に難しくなっています。

階層データのどの「レベル」を検索するかを決定するための 3 行の設定変数

検索フォームがある場合は、params ハッシュから直接スコープまたは Model.where() 呼び出しに渡したいと思うでしょう。必要に応じて、モデルにスコープを設定します。

サブドメインがリクエストに含まれているかどうかに基づいて、いくつかのビュー変数を設定するための別の 10 行。

これは、せいぜい1行であるべきだと私には思えます。または、あなたの見解では、ifステートメントを使用して、サブドメインに応じて出力を変更する必要があります。

以下に基づいて 2 つのページのいずれかにリダイレクトする 10 行のセクション:

2つのビューの説明で唯一異なるのは、「ユーザーがアクセスを要求したかどうか」です。これは単なるブール変数ですか? 必要なビューは 1 つだけです。違いを 2 つのパーシャルにラップしてから、ビューに入れ、どちらかを選択する if ステートメントを 1 つ記述します。

動的アレルを構築するためにさらに 10 行。

Arelに行く必要があるかもしれませんが、私はそれを非常に疑います. 実際の検索呼び出しは、ほとんどの場合、標準の ActiveRecord クエリ インターフェイスを介して 1 行で実行できます (また、1 行を目指す必要があります)。ActiveRecord Queryインターフェースを介して、他のモデルへの結合/条件の絞り込みなどを処理するモデルに強力なスコープを設定したい。

于 2011-06-19T17:45:05.513 に答える
1

コードのようなものであなたが言ったことを要約します(申し訳ありませんが、ルビーを知りません。疑似コードと考えてください):

void index() {
  establishHierarchyLevel();
  if (requestIncludedSubdomain())
    fillSubdomainFields();
  else
    fillNonsubdomainFields();
  if (user.isSignedIn() && !user.hasAccess()) {
    if (user.hasRequestedAccess())
      letUserIn();
    else
      adviseUserOfRequestUnderReview();
  }
  buildDynamicArelWhateverThatIs();
}

35 行ではなく 14 行です (もちろん、抽出されたメソッドの本体はコード全体を長くしますが、これを見て何をしているかを知ることができます)。やる価値はありますか?それは、あなたまたは後続のプログラマーにとってより明確かどうかに大きく依存します。私の推測では、小さなコード ブロックを独自のメソッドに分割することで、コードの保守が容易になるので、やる価値があると思います。

于 2010-10-27T13:47:49.650 に答える