NancyFxシリーズのハローワールド

5484 ワード

以前のブログ記事では、NancyFx(略称:Nancy)というフレームワークについて何度も言及しました.技術というものは時代と共に進み、常に新しいものを使うべきだ.何年もASPをやってきた.NETとASP.NET MVCアプリケーション開発、考え方を変えて新しいものを使うのもいいですね.最近比較的に密集しているのはいくつかのプロジェクトの中で深くNancyを使って、甚だしきに至っては1つの前後の業務のロジックに対してすべてとても複雑な元のASP.NET MVCプロジェクトは、Nancyフレームワークで完全に書き換えられています.2人で2週間もかかりません.私たちはいます.NET方向ではすっかりNancyが好きになり、本編からはNancyという優れた軽量レベルのオープンソースWebフレームワークをご紹介します.

なぜNancyを選んだのか


ASP.NET MVCはマイクロソフトベースASP.NETが開発したクラスROR(Ruby On Rails)のWebフレームワークは、ASP.NET WebFormは、インターネット向けのWebアプリケーションをチームワークで開発するのに適しています.元のWebアプリケーション形態に近いため、ASPよりも柔軟性が高い.NET WebFormはもっと高く、深く受けています.NET Webアプリケーション開発者たちのお気に入り.
しかし、5つの大きなバージョンの反復を経て、ASP.NET MVCは依然としてASPを離脱していない.NETという不器用な老人.ASPを迂回したいときはNETが何かをすると、それは不可能だと気づきます.清潔で柔軟なURLが必要な場合はASP.NET MVCはあなたが複雑なルートを設定してこそ満足することができます.ユニットテストをもっと深くしたいときは、難しいことに気づきます.重いContextは生まれつき柔軟なMockができません.-マイクロソフトのFakesがいいのはMock Contextに役立つと言えるかもしれません.しかし、私が前に言ったのは難しいですよ.できないわけではありませんよ.Moqを使ってもFakesを使っても、難しいです.デザインの時、このことをあまり考えていませんから.
だから、少なくとも別の選択肢が必要です.Nancyは選択肢の一つで、表現は悪くない.
Nancyの特徴をいくつかご紹介しましょう
  • オープンソース&コミュニティ化
  • はASPに依存する.NET
  • MVCモードは必須ではありません
  • 先天性試験
  • 先天的支援依存注入
  • 高さカスタマイズ可能
  • 簡潔明快
  • プラットフォーム間(サポート.NETおよびMono)
  • サポート内容協議
  • は、任意のアプリケーションにおいて
  • をhostすることができる.
  • ……

  • オープンソース&コミュニティ化


    Nancyは完全にオープンソースのフレームワークであり,MITプロトコル,ソースコードHostはGitHub上にある.Nancyフレームワークに関する項目はすべてhttps://github.com/NancyFxで行ないます.コアプロジェクトhttps://github.com/NancyFx/Nancyのスターはすでに3000に近く、nuget上のpackageのダウンロード総量は20万を超えた.nuget上のnancyに関連するpackageは120個を超えている.
    Nancyの公式ブログhttp://blog.nancyfx.orgの中で、時々よく良い関連内容を書くことができます.
    Nancyの公式には、マイクロソフトのMVP賞に似たMVM(Nancy Most Valued Minion Award)賞も開設されている.現在、価値のある奨励金はありませんが、この賞のバッジを使用することを許可され、自分のブログサイトに置くことができます.
    Christian Horsdalは2013年に74ページのNancy書「Instant Nancy Web Development」を出版したことがあるが、ほとんどの内容は現在も時代遅れではないが、価格は中国人にとって少し高い-$12.99だ.

    ASPに依存する.NET


    System.WebはASP.NETのコアdll.Webアプリケーション全体に必要なさまざまなタイプが含まれています.いくら使っても、そこには軽くないものがたくさんあります.
    Nancyはプラグイン機構によって追加機能または代替機能を提供する.Nancyは特定のインプリメンテーションやフレームワークをバインドせず,すべての要求と応答処理は緩やかな結合と自由なカスタマイズの基礎理念に基づいて構築されている.これはNancyが実行できることを意味する.NET Client Profile環境では、ASP.NET MVCのようにインストールが必要である.NETフルフレーム.ASPに依存しませんNETフレームワークはSystemである.Web.dllも、ASPを受ける必要はありません.NETの制約.

    MVCモードは必須ではありません


    Nancyは、Model-View-ControllerのMVCモードまたは他の任意のモードを使用することを強制しません.httpリクエストに応答するサービス・エンド・フレームワークであり、Webサイト、WebService、WebAPIなどのアプリケーションを構築するのに適しています.
    これはNancyでMVCモードを使用できないという意味ではありません.ビューフォルダの下で自分のビューを定義したり、Modelsを作成してエンドポイントに戻したり、ASPを使用するようにModelsにマッピング要求したりすることができます.NET MVC同様.ASPに詳しいならNET MVCではNancyを使いやすく、学習コストの問題を心配する必要はありません.

    先天的でテストしやすい


    Nancyはrequst/responseサイクルを完全にテストできるクラスライブラリを提供し、要求がModelに戻ることが期待に合っているかどうかをテストするだけでなく、acceptヘッダを通じて応答のフォーマットが正しいかどうかをテストすることができます.Nancyはサーバなしで要求応答をテストでき、ASP.NET MVCでは難しいです.

    先天的なサポート依存注入


    NancyにはTinyIoCというコンポーネントが統合されており、すべての依存関係を自動的に発見したり、アプリケーションに特定の依存関係を設定したりすることができます.Bootstrapperクラスでは、さまざまな方法や属性でNancyアプリケーションを構成することができます.
    もちろん、プラグインメカニズムを使ってTinyIoCのContainerをAutofac、Unity、Windsor、StructureMap、Ninjectに変更することもできますが……など、具体的にどれを使うかは自分のニーズや好み次第です.

    高度にカスタマイズ可能


    Nancyの核心的特徴の一つは拡張性である.モデルバインド、ビューレンダラー、シーケンス化プログラムなどをカスタマイズできるように設計されています.実際には、自分のINancyEngineを実現したり、Nancyのリクエスト処理ロジックを徹底的に変更したりすることができます.Nancyは事前定義された約束のセットを持っています.Nancyが約束ルールを変更したい場合は、それを置き換えることができます.すべてがカスタマイズ可能で、大きな拡張性を備えています.

    簡潔明快


    Nancyのもう一つの核心理念は、Web開発を簡単かつ迅速にすることです.簡潔な文法規範により、アプリケーションに影響を与えない前提で、コードをよりきれいに理解することができます.少量のコードで軽量レベルのアプリケーションを開発することができます.

    クロスプラットフォーム


    Nancyは、Windowsで実行できるオペレーティングシステムプラットフォームに依存していません.NETでも、Monoを通じてMac OSXやlinuxシステムで非常によく動作しています.Nancyは、ラズベリーパイのようなMini PCプラットフォームでも実行できます.もちろん、ASP.NET MVCも多くの場合、多くのプラットフォーム、特にASP.で実行できる.NET MVC 6という新しいバージョンです.

    コンテンツ交渉のサポート


    次のコードと同様に、Nancyで実行された結果は変わらないわけではありません.
    Get["/"] = p => { var model = SomeModel(); return model;
    };

    コンテンツネゴシエーション(Content Negotiation)メカニズムにより、acceptのHeader値によって最終的な結果をどのようにレンダリングするかを決定できます.
    デフォルトでは、ユーザーがブラウザを使用してアプリケーションの"/"パスにアクセスすると、Nancyはモデルの対応するタイプ名のビューを検索し、モデルのデータをビューに渡し、対応するビューエンジンを呼び出してレンダリングした後、ユーザーに応答します.
    クライアントがajaxなどの方法を使用して、サービス側にjsonまたはxml形式のデータを取得するように伝えた場合、上のコードはページではなく、modelが対応するシーケンス化されたデータを返します.
    これにより、コードと同じアドレスを使用して、さまざまなサービスを提供することができます.かっこいいのではないでしょうか.

    任意のアプリケーションでホストできます


    Nancyはホスト非依存主義者であり、IIS、WCF、ASP.で実行できる.NETは、exeに埋め込まれてwindowsサービスまたはselfhostアプリケーションとして走ります.もちろんfastcgi-mono-serverで、nginx、Apache、LighttpdなどのLinux常用WebServerで実行することもできます.特筆すべきは国産無料webserver--JexusはNancyをより便利かつ効率的に実行することができ、このブログはJexusで実行され、インストール方法は私の前の文章「Ubuntu ServerにJexusをインストールする」を参考にすることができます.とにかく、ほとんどどこにもいないことができます!

    Hello world


    ほとんどのプログラム猿/媴たちが書いた最初のアプリケーションはHello worldで、これはすでにこの行の慣例です.次のコードが走り出すと、ブラウザがアプリケーションの「/」アドレスをブラウズすると、偉大な「Hello world」が表示されます.
    public class HomeModule : Nancy.NancyModule
    {
        public HomeModule()
        {
            Get["/"] = x => "Hello World!";
        }
    }

    どうですか.簡潔で明快でしょう.Nancyのデフォルトには2つの約束があります.
  • 各モジュールはNancyModuleから派生し、NancyModuleはMVCのController
  • に類似している.
  • コンストラクタではルーティングアドレスと要求方式が定義され、Get["/"]はGET方式で"/"アドレスを要求することを表す.