0

大規模に開発していapplicationます。最初は私のアプローチは混乱していました.1月から開発していても、私はjavascriptの初心者です。私はmvcアプローチを探していましたが、次のようなガイドラインを見つけました:

Model : AJAXcall と services を含む

コントローラ: 例: jQueryウィジェットなど

View : HTML のレンダリングなど

javascript上記の 3 つの提案に完全に従ってアプリケーションを構築する方法が明確にわかりません。私はすべてを行うことができます、私は管理することができます 私は操作をtemplate書くことができますjQueryAJAX

私には明確でないのは、これら 3 つのモジュールを実際に分割する方法です。私がこのアプローチを試みるとき、私はmoduleそれがしなければならないことだけをすることはできません。

私はMV*アプローチも試しました。これは、私が見ているものと私のニーズのために、より良いアプローチかもしれませbindん。diveventdataserver

私が知りたいこと:

それぞれの本当の能力はどれModuleですか? たとえば、bindaclick eventに a をし なければならない場合button 、どこに書く必要がありますか?

.on('click',callback)

方法?callback彼が電話することをどこに書かなければなりませんか?

私は次のように書いています:フレームワークはありません。なぜなら、ゼロからそれを書くアプローチを理解していなければ、完全なフレームワークの使用を完全に理解することは不可能だと確信しているからです。

私の疑問が明確であることを願っています。そうでない場合はコメントしてください。いずれにせよ、私の英語で申し訳ありません。

4

2 に答える 2

6

答えは一つではないので、これは答えではありません。いくつかのすべきこととすべきでないことについて言及したいだけです。

  • モデルに純粋なデータを保存してください。表示オブジェクトではなく、ビジネス オブジェクトと考えてください。たとえば、通貨は数値としてモデルに格納する必要があります。おそらく、小数点以下の桁数に加えて、それが重要な場合は通貨の指標を追加します。1000 と整数部分を小数部分と小数点以下の桁数から分離するために、ローカルで選択した文字を含む文字列として数値を保存しないでください。
  • クリック イベント (および同様のユーザー アクション) のハンドラー コードをコントローラーに配置してください。
  • ロード時またはコントローラー内の外部イベントで画面を更新するコードを配置してください。(外部イベントとは、証券取引所のデータによる株価の更新や、アプリケーションに入ってくる天気予報の更新のようなものです。)
  • HTML または HTML を生成するコードをビューの一部として配置してください。
  • コントローラーにビューを呼び出して、適切なタイミングで表示を更新/変更してください。
  • コントローラーまたはビューのいずれかでモデルを呼び出して、現在のモデル データ値を取得するか、現在のモデル データを更新します。(以下の同様の「禁止事項」を参照してください。)
  • M、V、C の 3 つの部分の間の接続を減らしてください。誰が誰とどのような目的で話すことができるかを明確に定義し、その規則を神聖に保ちます。例外を見つけた場合、それはそれらのルールの全体像に問題があることを示しています。

そして、さらにいくつかのこと

  • ロード時に画面を表示するコードをコントローラに配置しないでください。それは明らかにビューの問題です。これは、コントローラーが何らかの方法でビューを呼び出さなければならないことを意味します。
  • M、V、C コードをランダムにスパゲッティ接続しないでください。たとえば、モデルがビューまたはコントローラーでコードを呼び出さないというルールを作成する場合があります。
  • モデルと通信するコントローラーとビューの両方を持たないでください。

質問:

  • イベント ハンドラを接続するコードはどこに行くのでしょうか。
  • 「ビジネスロジック」はどこに置く?これは、アプリケーションのルールを認識しているコードです。たとえば、検証はビジネス ロジックです。一部のコードでは、米国の場合は郵便番号が、英国またはカナダの場合は郵便番号がどのように見えるかを知る必要がある場合があります。検証が失敗した場合、コントローラーはビューにエラーメッセージ、赤いマーク、振動ボックスなどを表示するように指示するコントローラーです。検証ルールのビジネス ロジックもコントローラに組み込まれますか?
  • 外部データ ソースからデータを読み込むコードはどこに行くのでしょうか? (サーバー、JSON Web サービス、データベース、スクリーン スクレイピングなど) 「モデル」と考えるかもしれませんが、新しいデータが戻ってきたときにモデルがコントローラーを呼び出して、ビューを更新するように指示する必要があります。それは正しくないようです。
  • 同様に、別の画面に移動する「送信」ボタンに相当するものを処理するコードは何ですか?
  • 画面に表示可能なフォームから純粋なデータであるフォームへのデータの変換が遅すぎる場合、どうしますか?
  • 画面には常に、独自の MV&C で構築できる自己完結型の部分があります。これらの小さな MVC の複数と、画面全体である大きな MVC との間の対話をどのようにセットアップしますか? それらの小さな人たちは、大きな MVC のビューですか? それともコントローラーですか?一度に両方になることはできますか?小さなモデルを含む大きなモデルがありますか、それとも小さなモデルと大きなモデルの間でデータが流れますか? このすべてについて誰が知っていますか?
  • 複数の画面で構成されるさらに大きな MVC はありますか? 存在する場合は、おそらくサーバー上にあります。
  • 「合成」イベントをどのように処理しますか? これは、データが正常だったが、現在は悪い状態になっている (または不完全であり、現在は完了している) 場合に発生する「イベント」のようなものです。このイベントのリスナーは、[送信] ボタンを無効にして、ユーザーに問題への注意を促すエラー メッセージまたはアニメーションを表示できます。フレームワークや言語に組み込まれた一般的なイベントではないものであれば何でもかまいません。おそらく、マルチプレイヤー ゲームの世界観の状態の変化を示すサーバーへのメッセージです。

これは、独自の MVC を作成するとき、または既存のフレームワークを評価するときに頭に浮かぶもののリストにすぎません。

于 2013-07-19T19:13:25.410 に答える
2

特定の枠組みの外に明確な答えはありません。MVC パターンの一般的な責任は誰にとっても (ほとんど) 明らかですが、各フレームワークには、これらの各レイヤーに配置するコードの正確な部分について独自の解釈があります。フレームワークによっては、いくつかのレイヤーをスキップしたり、代わりに別のレイヤーを追加したりすることさえあります。

フレームワークを使用したくないことは承知していますが、それでも、現在のソリューションがどのように機能するかの概要を把握しておくことは価値があります。そのため、その機能が気に入った場合、または独自の方法を使用したい場合は、十分な情報に基づいた決定を下すことができます。 .

少なくとも 1 つのサーバー側 MVC フレームワーク (Ruby on Rails や Asp.Net MVC など) といくつかのクライアント側 MVC フレームワーク (Backbone.js、Angular.js など - JavaScript のみ) を確認することをお勧めします。彼らのドキュメントを読んで、他の人が行った (そしてテストした) 選択から学びましょう。サイトtodo mvcは、さまざまなクライアント MVC フレームワークを比較して、より適切なアプローチを見つけるのに役立ちます。

これは単純なトピックではありません。各アプローチの長所と短所をゼロから議論するには、永遠に時間がかかります。

于 2013-07-19T19:43:09.343 に答える