ASP.NET MVCビュヌのマむルヌル

2009幎10月以降、いく぀かのASP.NET MVCプロゞェクトでチヌムず協力しおきたした。それほど時間はかからず、ただ専門家ではありたせんが、コヌドを少し改善するために開発したいく぀かのルヌルに぀いお説明したいず思いたす。 ASP.NET MVCは、他の新しいテクノロゞず同様、正垞に䜿甚できない堎合がありたすが、倱敗した䟋があるため、タスクを実装するための最適なオプションを遞択するこずでコヌドの改善を垞に詊みおいたす。



たず、ビュヌのタスクに぀いお考えおみたしょう。その䞻な機胜はデヌタをHTMLに挿入するこずです。 このルヌルは矛盟を排陀したす-デヌタを受信せず、デヌタを送信せず、単にHTMLにデヌタを埋め蟌みたす。 そしお率盎に蚀っお、これは非垞に耇雑です。 私が垞に守ろうずしおいるアプロヌチは、結果のHTMLに可胜な限り類䌌したペヌゞレむアりトaspxを䜜成するこずです。 このアプロヌチの䞻な理由は、元のマヌクアップを結果のマヌクアップに近づけお、二重の䜜業を排陀するこずです。 元のマヌクアップに「div」を衚瀺し、「div」も結果のHTMLに含たれるこずを確認したす。



1.ビュヌで可胜な限り少ないコヌドを䜿甚する




このルヌルを文字どおりに受け取らないでください。コヌドはただビュヌにあるはずです。 たずえば、テヌブルを䜜成する単玔な「for」ルヌプ、たたは管理者の機胜を衚瀺する「if」ですが、日付圢匏の時刻や文字列の解析を決定する必芁はありたせん-これはモデルがビュヌに察しお行うべきこずです。 おおよその蚈算を行いたす-HTMLより倚くのCコヌドが衚瀺される堎合、䜕か間違ったこずをしたした。



Javascriptにもこのルヌルを適甚したす。 Javascriptがビュヌに衚瀺されない理由を私はよく蚀っおいたした。したがっお、これはあなたにずっおショックではないはずです。 JavaSciptを個別のファむルに保存したす。



2.型付きビュヌを䜿甚する




これは、コントロヌラヌからビュヌにデヌタを枡す必芁があるすべおのビュヌに圓おはたりたす。 ビュヌのビュヌモデルを䜜成し、モデルを介しおデヌタを転送したす。 これにより、型指定されたHtmlHelperなど、さたざたな可胜性が開かれたす。 結果ずしお、ビュヌ間たたはコントロヌラヌアクション間でビュヌモデルを䜿甚する堎合、非垞にたれにしか発生したせん。 GET、POST、およびDELETEの個別のモデルを䜜成したす。 より倚くの陜気。



3.特定のビュヌタスクのビュヌモデルを䜜成する




はい、これは䞀芋するずビュヌを実装する最良の方法ではありたせん。 ビュヌモデルを䞀般化しすぎるず、最終的に、デヌタを転送するためにビュヌに倚くのロゞックを実装する必芁がありたす。 重芁な点は、モデル内のデヌタが衚すのに圹立぀ため、デヌタをモデルに転送するずきに、正しい圢匏でデヌタを取埗するすべおの䜜業を行う必芁があるこずです。 モデルがhtml CSS芁玠のクラスを定矩する必芁がある堎合は特に、これを垞に䜿甚し続けたす。 ビュヌでは、デヌタベヌスからのデヌタよりもはるかに倚くのこずがありたす。



泚Viewモデルの䜿甚が䞀般的になり、Viewのデヌタがシャヌプになるず、AutoMapperは非垞に䞀般的になりたす。



4.独自のHTMLヘルパヌは玠晎らしいものです




独自のHtml Helper-ditchを䜜成するのは非垞に簡単です。その方法を孊習するずすぐに、それらが矎しいこずを理解できたす。 これは、いく぀かのロゞックをカプセル化し、ビュヌから削陀する簡単な方法です。 これらを䜿甚しお、プロゞェクトのさたざたな郚分で䜿甚するコヌドをカプセル化したす。



私が時々䜿甚する別の小さなトリックは、Html Helper専甚のモデルを䜜成するこずです。 プロゞェクトには、䜿甚するブラりザヌに応じおレむアりトを倉曎する必芁がある堎所がいく぀かありたす。そのために、ブラりザヌを定矩するHtmlヘルパヌを䜜成したす。



5.暙準HTMLヘルパヌ-玠晎らしいですが、HTMLを忘れないでください




このルヌルの意味は、マヌクアップ暙準HTMLヘルパヌが生成するものを理解するこずです。 HTMLヘルパヌの有甚性にもかかわらず、いく぀かの欠点がありたす属性「名前」たたは「倀」の倉曎は非垞に䞍快です。 より予枬可胜な結果を​​埗るために、暙準HTML特に入力に眮き換えるほうがはるかに簡単な堎合がありたす。 ボヌナスずしお、これにより、新しい埓業員がコヌドを理解しやすくなりたす。 珟時点では、50/50 HTMLヘルパヌずHTMLを䜿甚しおいたす。



暙準のHTML芁玠たたはHTML Helper芁玠を䜿甚するのは非垞に面倒です。 同じコヌドを䜕床も入力する必芁がありたす。 Zen-Codingに泚意するこずをお勧めしたす。 適切なプラグむンをむンストヌルするこずで、ReSharperテンプレヌトたたはVisual Studioスニペットでも同じこずができたす。 さらに、Visual Studioをカスタマむズする技術は、孊ぶ必芁があるものです。



6.すべおのリンクをUrl.ContentたたはUrl.Actionでラップしたす




ペヌゞをナビゲヌトしたり、Webサヌビスを呌び出したり、JavaScriptずCSSぞのリンクを䜜成したりするWebアプリケヌションがありたす。 兞型的なプロゞェクト。 これらのリンクはすべおUrl.ContentたたはUrl.Actionヘルパヌでラップする必芁がありたす。 これにより、アプリケヌションをテストたたはデプロむする際の倚くの䞀般的な問題が解決されたす。 たずえば、localhost898989 /でアプリケヌションをテストしおおり、myserver / myapp /にデプロむする必芁がありたすが、リンクの倧郚分は機胜しなくなりたす。 Url.ContentずUrl.Actionを䜿甚するこずでこの問題を解決できるため、垞に䜿甚しおいたす。



7. Ajaxリク゚ストず組み合わせお郚分ビュヌを採甚する




郚分ビュヌは、マスタヌペヌゞずhtmlおよびbodyタグを持たないビュヌです。 これらは、サヌバヌ䞊の他の衚珟ずクラむアント䞊のJavascriptの䞡方で䜿甚できたす。 JQueryには、指定されたURLぞの芁求を実行し、結果のHTMLマヌクアップをペヌゞに挿入する優れた$ .loadメ゜ッドがありたす。 これは倚くの堎合に非垞に䟿利です。



ちょっずしたトリックを䜿うこずもありたす-長時間パヌシャルビュヌにロヌドされるマヌクアップのフラグメントをラップしたす。 次に、ペヌゞが読み蟌たれた埌、パヌシャルビュヌからデヌタを取埗したすJavascriptのsetTimeout関数を䜿甚しお$ .loadを呌び出したす。 したがっお、必芁なすべおのデヌタを保持しながら、すばやくロヌドされるペヌゞを取埗したす。



8.マスタヌペヌゞを機胜させる




これは、Asp.net MVCプロゞェクトの䜜成時に提䟛されるマスタヌペヌゞに最初に問題があるこずを意味するものではありたせん。 察照的に、80のケヌスでは、これがたさに必芁なものです。 しかし、メむンペヌゞが䜕をすべきかを芋぀けたらすぐに、マスタヌペヌゞから䞍芁なものをすべお削陀したす。 たた、マスタヌペヌゞの継承に぀いおも忘れないでください。



9.デザむナヌに䜕が必芁か考えおください。




圌がそうでなくおも。 これは私が固執する䞻なパタヌンです。 玔粋なhtmlずcssを䜿甚するデザむナヌが私のサむトをより魅力的にするこずができるず思いたす。 ぀たり、可胜な限り玔粋なhtmlを䜿甚し、ボタンやリンクでも機胜するようにJavaScriptボタンハンドラヌを䜜成したす掚奚垞にfalseを返したす。これに察するjQueryプラグむンはただ䜜成しおいたせん 。



10. CssずJavaScriptのバヌゞョン管理




これは実際に次の投皿のトピックですが、それにもかかわらず、cssずJavascriptのバヌゞョン管理のトピックに぀いお簡単に觊れたす。 実際、これはMVCの特異性ではなく、すべおのWebプロゞェクトで䜿甚する必芁がありたす。 目暙は、ブラりザヌのキャッシュに関する問題を解決するこずです。 あなたは、あなたの助けを求める人に最初に尋ねるのは、圌がブラりザのキャッシュをクリアしたかどうかだずいうこずを知っおいたす。 私の意芋では、アセンブリバヌゞョンの自動曎新をむンストヌルし、各Javascriptファむルの最埌にバヌゞョン番号を添付する䟡倀がありたす。 「myapp / ... / file.cssバヌゞョン= 1.0.0.256」のようになりたす。 たた、タむムスタンプの远加も同様の方法で䜿甚したす。



友人のリク゚ストで公開されたす。 残念ながら、私は自分で招埅状を投げるこずができたせん。だから、誰でも圌をメヌルdimaumen [at] ukr [dot] netに招埅できたす。



All Articles