2009-07-25 1 views
1

私はasp.net mvc C#でjQueryを使ってWebアプリケーションを作っていますが、これには異なる価格設定があります。最小限の重複コードで保守可能なコードを作成するには?

もちろん、もっと多くの機能を使うことができます。

私は役割を使用する予定でした。したがって、誰かがプラン1を購入した場合、プラン1の役割を果たします。次に、ページ上でifステートメントを使用して、特定のロールに含まれているかどうかを確認します。彼らが機能を使用することを許可されている場合は、それを生成します。もし何もしないなら。

ページ全体が、そのページの1つの機能を除いてすべての役割で共有される可能性があります。

私は、私がそれ以上の機能を追加すると、私のページはif文で混乱し、維持するのが難しくなるので、私はそれを考えているべきではないということを誰かに教えていました。

彼らは私がそれぞれの計画を別々のアプリケーションとして扱うべきだと言いました。だから私は2つの計画を持っている場合、別のファイルに行く2つの異なるリンクがあります。

私はif文をタックし続ける必要はないので、おそらく長期的にはより良いと思う人には同意しますが、私を得ることはこのシナリオでは言います。

私のサイトの将来のバージョンでは、SMSと電子メールのアラートがあります。

今私は、ユーザがしなければならない一連のタスクを持つHTMLテーブルを持っています。今後のバージョンのサイトでは、電子メールまたはSMSでアラートを受け取るオプションを提供します。彼らが電子メールで表の列に警告すると言うと、封筒が表示されます。

これは、プラン2ではなくプラン1ではないユーザーのためのものです。そのため、プランコードのすべてのコードをコピーしてPlan2.aspxというファイルに貼り付けるだけでした。次に、アイコンの新しい行をプラン2の新しく貼り付けたコードに追加します。

Plan2ファイルにあるこの余分な行を除いて、すべてが同じであるPlan1ファイルがあります。

テーブルに何か問題がある場合は、重複したコードが原因でそのアイデアがあまりにも狂っているわけではありません。今は2つの場所に変更する必要があります。 3つ目のプランを追加したら、同じコードの3つのセットをいくつかの違いを見て追跡する必要があります。

私の元々の方法は、plan2だけのテーブル内のその行は、ifステートメントでその役割をチェックすることで囲まれていました。

場合によっては、私はたぶんすべての共通コードを別の部分的なコントロールの1つの部分コントロールとすべての異なるコードに置くことができますが、そのような状況はわかりません。

このような状況がさらに多くあります。

あなたのコードをメンテナンスできるようにするには何が最善の方法ですが、重複したコードの量は最小限に抑えてください。

私は達成しようとしているものを説明するのはちょっと難しいですし、そのような状況がトラブルの可能性のある領域になる可能性があります。


編集


だから私はまだちょっと人々が与えられていると少しのフルそれらの例だけではなく、スタブを見てみたいの例で混乱しています。

私も考えていましたが、これが良い練習になるのか、それともかなり奇妙に見えるかもしれないのか、いくつかの部分があるのか​​どうかはわかりません。

部分的な見解では、すべてが1行に似ていても共通していることです。次に、2つの別々のリンクを持ち、役割に応じて部分ビューをまとめます。

私はjqueryもののために2つの別々のリンクについて考えています。私はこの

<textbox code> 
<textbox code> // this textbox code is only for plan 2 ppl. This textbox needs to go here 
<textbox code> 

を持っていた場合、インスタンスのためのように、これらのテキストボックスタグのそれぞれ独自の部分図にあるであろう(その3この場合)

ので、私は2つのaspxページを持っているでしょう。

第一

<render partialView 1> 
<render partialView 2> 
<render partialView 3> 

第二

<render partialView 1> 
<render partialView 3> 

そして、これら2 ASPXページの各アップリンク異なるJavaScriptファイルを持っているでしょう。

jqueryで1つのjavascriptファイルを持っていれば、誰かが行方不明のhtmlファイルを追加して、それらの機能にアクセスできます。

「if文」の方法を使用している場合、私はどのように書くのか分かりません。

同時に、partialViewのすべてが非常に面白く見えるでしょう。テーブルや何かを作っているように。

部分的なビューの1つに開始タグといくつかの行があり、道路のX部分ビューに終了タグがあります。

画像全体を見るためにX個のファイルを開く必要があるので、画像全体を見るのが非常に奇妙で難しいでしょう。

したがって、より良い方法があるはずです。

答えて

0

if文(Rob Coneryの問題についてはblog postを参照してください)を使ってビューを散らばっておくのはベストプラクティスではありませんが、いくつかの基本的な論理は私の意見では受け入れられます。ただし、これを行う場合は、パーシャルを使用してビューを可能な限り整理された状態に保つようにしてください。これは、あなたが指摘したように、最良のソリューションだと思うものです。

あなたのビューロジックは本当にシンプルでなければなりません。あなたのモデルは、コード自体の複製を保存するために価格プラン情報を継承することで利益を得るでしょう。

他のコードを削除しました。あなたはUserクラスを使用するだけだと指摘しました。

テキストボックスに関しては、これは扱いにくい可能性があります。 1つは、グローバルJSを含むスクリプトフォルダを持つことができ、次にJSが他のロール(たとえばロール2と3)を持つサブフォルダを持つことができるという考えです。これらは、ユーザーが関連する認証レベルなしでファイル/フォルダにアクセスできないようにするカスタムルートの制約によって保護することができます。同様のレベルの保護を提供するには、web.configも使用する必要があります。つまり、web.configファイルを使用するだけです。

+0

こんにちは、私はまだベストプラクティスを行う方法を探しています。毎回最良の練習をしますか?おそらくまだ知っておくべきではない。 人が私に語ったことと、私がやりたいことをミックスすることは、良い方法になると思います。 もう1つタグが必要な場合と同様に、コードを2回複製するのは馬鹿馬鹿しいようです。 だから私はあなたのドンは、モデルと一緒だとは思っていません。なぜあなたはモデルを使用する必要がありますか?モデルを作るのではなく、単に "User.IsInRole(" role ")"に行けませんか? もう1つのことは、それについてはあまりよく分かりませんが、1つの価格プランに余分なテキストボックスがあります。 – chobo2

+0

このテキストボックスはjqueryに接続されています。 jqueryを追加するには、ユーザーがその役割にアクセスできるときだけです。私がjqueryのすべての要素を残しておけば、コードを見ている人は、テキストボックスを作成するだけでjqueryに接続することができます。私はそれを周りに置くことはできません。 – chobo2

+0

User.IsInRole()に関しては、そうです、それを使うことができます。私は、ユーザーの一部ではない多くのビジネスロジック固有のプロパティを使用する傾向があります。私はテキストボックスを議論する答えを更新します... –

0

http://www.asp.net/mvcのチュートリアルとサンプルプロジェクトを見てください。

これらはすべてあなたを助ける特定の原則に従います。

2

コンポーネントはどれほど抽象化されていますか?

私の素朴なアプローチは、コンポーネントをUIに並べる別のレイヤーを作成することです。リポジトリのパターンのようなものは、このような方法で:あなたは1を持っている場合はもちろん

public IEnumerable<PlanRestrictedFeature> GetFeaturesForPlan(Role r) 
{ 
    //return all features that the user has access to based on role 
    //this forces all this logic to exist in one place for maintainability 
} 

、この方法はまた、文字列、列挙型、または計画オブジェクトに取ることができます。内部的には、これは物事をより簡単にするためにある種のマップを使用するかもしれません。

次に、Viewは各コンポーネントのRenderメソッドを呼び出します。レポジトリがレンダリングの正しい順序で戻ってきたことを確認し、配置にCSSを使用します。

+0

申し訳ありません「どのように抽象化されたコンポーネントですか?」とはどういう意味ですか? また、私はあなたに何をしようとしているかを私に見せてくれるだけの非常に単純な例を振りかけることができますか? – chobo2

関連する問題