Playフレームワークの私の5つのお気に入りのチップ

Playについては、すでにhabr: 優れたJava MVCフレームワーク「Hello World」チュートリアルで書いています。 この記事では、 ZeroTurnaroundのThomasRömerがPlayでのお気に入りの作品について語っています! フレームワーク。



過去1年間、私はPlay!を使用して2つのプロジェクトを開発してきました。 枠組み これはJRebelおよびLiveRebel ライセンスサーバーです。 これら2つのタスクに異なるフレームワークを試しましたが、最終的にはStrutsPlay!の 2つの候補になりました 枠組み プレイ! Strutsは機能し、結果を達成することが保証されている少し古い馬車と考えられていましたがそれはより危険で、面白く、反抗的でした。 チームで議論を重ねた後、私たちはチャンスをつかってPlay!を試してみることにしました。 他の人よりも多く、私の愛を共有したいと思います。







Playでお気に入りの5つのチップ! 枠組み



  1. タスク(ジョブ)-バックグラウンドで作業を行う
  2. テンプレート-直感的で生産的
  3. URLマッピングとリダイレクト-Horror as Easy
  4. テスト-強制され、半分は完了
  5. 素早い変更-幸せで生産的な開発者
  6. 結論




タスク(ジョブ)





Playのタスク! このフレームワークは、プログラムロジックをバックグラウンドで実行する方法を提供します。 プレイ! ライフサイクルとリードタイムを大事にします。 たとえば、5分ごとに何かを実行する場合は、 @Every(“5min”)



アノテーション@Every(“5min”)



使用するだけで、タスクは5分ごとに実行されます。 使用メモリ量をログに記録するMemoryUsageLogger



サンプルクラスをMemoryUsageLogger



ます。 簡単だよ



 @OnApplicationStart @Every("5min") public class MemoryUsageLogger extends Job { private volatile boolean maxPrinted = false; @Override public void doJob() throws Exception { Runtime r = Runtime.getRuntime(); long total = r.totalMemory(); long free = r.freeMemory(); long used = total - free; if (!maxPrinted) { Logger.debug("Used: %dM Free: %dM Total: %dM Max: %dM", m(used), m(free), m(total), m(r.maxMemory())); maxPrinted = true; } else { Logger.debug("Used: %dM Free: %dM Total: %dM", m(used), m(free), m(total)); } } private static long m(long bytes) { return bytes / 1024 / 1024; } }
      
      







パターン



これまで、JSP(古いXMLのような構文)、Jelly(Hudsonプラグイン)、XTemplate、およびSmarty for PHPのテンプレートを使用しました。 私は彼らと特に生産的に感じたことがありません。 コンテナを変更するとすぐにタルタラに飛び込むカスタマイズされたタグを作成し、膨張したXMLファイルと戦うか、テンプレートの表現の泥だらけの言語を学習するだけでも、これらはすべて楽しいとは言えません。



テンプレートをプレイ! Groovyを式言語として使用するとともに、再利用可能なコンポーネントのタグシステムを使用します。 Groovyは、Java開発者にとって特に簡単な、クリーンで直感的、強力、そして本当にシンプルな言語です。 また、Groovyは、テンプレート専用に作成された特別なものではなく、独立した、ねじれのないプロジェクトであることが好きです。



 #{list items:resources,as:'res'} #{if res.directory} <tr class="directory collapsed" rel="${res.id}" parent="${res.parent?.id}"> <td><a href="#">${res.name}</a></td> <td></td> <td class="right">${res.lastModified == null ? '(unknown)' : res.lastModified.format("yyyy-MM-dd HH:mm")}</td> </tr> #{/if} #{/list}
      
      







ちなみに、これらすべてには、テンプレートであっても素晴らしいエラーメッセージが付属しています。 どこを間違えたかをすぐに理解できます。 テンプレート言語がEclipseでサポートされ、オートコンプリートと構文の強調表示が提供されることを願っています。





URLマッピングとリダイレクト



Play!のコントローラー アプリケーションのURLにバインドされた多数の静的メソッドが含まれています。 たとえば、 /contacts/list



リンクを使用して何かを表示する必要がある場合は、 contacts



コントローラーにlist



メソッドを記述する必要があります(これはデフォルトの命名規則であり、必要に応じてオーバーライドできます)。 または、連絡先情報を表示するページが必要な場合は、 showContact



メソッドを作成し、それを/contacts/showcontact



添付します。



リストに/contacts/showcontact



が1つしかない場合に、連絡先リストページから/contacts/showcontact



ページにユーザーをリダイレクトする場合はどうなりますか? list



メソッドのJavaコードで、 showContact



メソッドを呼び出して、Play! これを外部リダイレクト(httpリダイレクト)として行います。 とても簡単で読みやすいので怖いです。



テスト中



自動化されたアプリケーションのテストは難しい質問です。 多くのアプローチがありますが、通常、それらをいくつか選択して、X。Playフレームワークで記述されたアプリケーションを試してみるしかありません。 別のアプローチを取ります:ユニット、機能、およびセレンテストをアプリケーションで実行するための素敵なインターフェイスがバンドルされています。 テストは忘れがちなものなので、「なんらかの方法で」開始するときは常に便利です。 テストの自動化に加えて、開発プロセス中に同じインターフェイスを使用できます(通常、このためには、IDEまたはant / maven / shellスクリプトからテストの起動を構成する必要があります)。







迅速な対応



ZeroTurnaround (文字通り「ゼロターンオーバー」または「インスタントレスポンス」)の私たちは、開発者の生産性に取りつかれています。 当社の主力製品であるJRebelを使用すると、アプリケーションコードを変更し、ブラウザーの更新ボタンをクリックするだけで、変更内容を画面に即座に表示できます。 フレームワークをプレイ! 同様の機能を提供します。 Play!のソースコードを調べる時間はありませんでしたが、いくつかの小さな制限(バイトコードの一部のメタ情報、tmp / bytecode / DEV、ステートレスモデル、カスタムplay run



参照)により、コードをオンザフライで変更する強力な機能を提供します。 ある時点でコードを「オンザフライ」で変更できない場合、アプリケーションを静かに自動的に再起動します。 これは、他のフレームワークに比べて非常に大きな利点です。



結論



フレームワークをプレイ! クールなチップを提供し、これらは私のお気に入りの5つだけです。 もちろんプレイ! -これは特効薬ではなく、独自の問題がありますが、これは別の記事のトピックです。 私がPlay!で作業している間、Webアプリケーションを開発するための生産的で直感的な環境であることが証明されました。 Playでお気に入りの作品は何ですか?








ToomasRömerは、 JRebelと同じ会社であるZeroTurnaroundの共同設立者であり製品リードです。 ThomasはJUG、OSSコミュニティ、ビールの大ファンです。 彼はdow.ngra.deにブログを書き@ toomasrとしてツイートし、また非営利のWebサイトchesspastebin.comを管理しています。 空き時間には、ドライブテストでレクサスをクラッシュさせ、チェス、ゴー、スタークラフトをプレイします。 彼の外見はだまされています。 彼はきっとあなたをつぶします。 どちらかといえば、彼とLinkedInはアカウントを持っています。









All Articles