
私自身についていくつかの言葉-私はIncoding Softwareで働いています。IncodingSoftwareは、長年にわたってアウトソーシングに成功しており、さまざまな分野(医療、掲示板、ソーシャルネットワークなど)でインターネットおよびイントラネットプロジェクトを実施しています。
Incoding Frameworkは、asp.net mvcプラットフォームでWebプロジェクトを開発するためのクライアント/サーバーソリューションです。
3つの部分で構成されます。
- サーバー -CQRSおよびイベントブローカーの実装
- Unit Test Contrib-テストをすばやく作成するためのユーティリティとスクリプトのセット
- クライアント -に分かれています:
- IML -C#でクライアントスクリプトを記述できる宣言型言語(メタコーディング言語)
- モデルビューディスパッチャー(MVD) -MVCのCQRSにより、中間コントローラーを作成せずにコマンドとクエリを実行できます。
注:Incoding Frameworkの特徴は、各部分が互いに統合されることです(IMLはAJAXにMVDを使用し、MVDはCQRSなどを実行します)が、個別に使用できます(Nugetには3つの独立したパッケージがあります)
1つの記事でフレームワークの各部分を検討することはできないため、ライブラリの最も興味深いコンポーネント(IML)に重点が置かれます。 クライアントの部分を強調した理由は、CQRS、Event Broker、Unit Testが.netの世界で多くの類似物を持っていることであり、すぐに興味を引くことは非常に困難です(多くの機能がありますが)が、IMLはまだありません直接アナログ。
類似物はありませんが、タスクはどのように解決されますか?
IMLには直接的な類似物はありませんが、もちろん間接的な類似物もあります。
- Javascript
- JQuery
- AngularJS、Backbone、Marionette
- TypeScript
JavaScriptなしで、ウェブサイトを構築しない
あなたはすべての困難に対処しなければなりません:
- 実行時のみのエラー
- 大規模なアプリケーションで問題になる動的言語コンポーネント
- nullは異なることがわかりました(null、undefined、 'undefined')
- そして、型付けされていない言語の他の多くの「魅力」
聞いていません、jqueryがあります
Jqueryの出現により、Webアプリケーションの開発が容易になりましたが、クライアント側のアプリケーションの複雑化により、ダビングのレベルが高くなるため、コードを記述するためのスクリプト作成アプローチが正当化されなくなりました。 。
OK、UIでアーキテクチャを構築しましょう
JS上に構築されたMVVMまたはMVCアーキテクチャはサーバーとの通信を提供しますが、モデルがクライアント側に表示される場合、モデルをサーバー側のモデルと同期する必要があり、これにより開発者はフロントエンドとバックエンドに分割されます。
注:プログラマーをサーバーとクライアントに分割するという考えは非常にうまくいかないようです。なぜなら、アクションを調整する必要があり、常に誰かがより速く働き、誰かがより遅くなるからです。 。
アーキテクチャをゼロから構築しないように、AngularJSなどの既製のJavaScriptフレームワークを使用できますが、asp.net mvcで既存のコードを繰り返して、Controller、Routesなどを記述する必要があります。すべてのjavascriptフレームワークの主な問題は、 JSコードを書く必要があります
ああ、JSがなければ
最近、型付きインタプリタまたは代替言語を使用してJavaScriptを記述する傾向が発達しています
TypeScriptはJavaScriptを記述する機能ですが、C#のような構文です。 TypeScriptとIMLの違いは何ですか:
- 既製の関数はありません(IMLは動作を記述する宣言言語ですが、実装は行いません)
- 新しい言語を学ぶ必要がある(IMLはC#)
- 結果のJSを形成するには、追加のユーティリティをインストールする必要があります(IMLはC#です)
- サーバー側と統合されていません(asp.net mvcに適合したIML)
さて、IMLはどのように役立ちますか?
IMLは、JavaScriptコードなしでクライアントスクリプトを記述するための一連のメソッドを提供します。 ブラウザーはイベントモデルの原則に従って動作し、実践が示しているように、それほど多くのシナリオはありません。
標準のアルゴリズムを見てみましょう:
- DOM要素でイベントが発生します(ユーザーに代わって、またはプログラムで)
- アクションが実行されます(ほとんどの場合、指定されたURLへのAjaxリクエストです)
- アクションのチェーンを開始するアクション完了コールバック(受信データの挿入、DOMの操作、CSSの更新、jQueryプラグインの使用)
コードを見せてください、すべてがすぐに明確になります
Html.When(JqueryBind.InitIncoding) .Do() .AjaxGet(Url.Dispatcher().Query(GetCardsQuery { Client = Html.Selector.Name(r=>r.Client) })) .OnSuccess(dsl => dsl.Self().Core().Insert.WithTemplate(idTemplate.ToId()).Html()) .AsHtmlAttributes() .ToDiv()
より良いアルゴリズム
IMLは宣言型なので、その構造は簡単に説明できます
- When InitIncoding-要素がページに表示されたときにイベントが発生したとき
- 実行 -イベントの動作を処理する方法(デフォルトの防止、伝播の停止)
- アクション -指定されたURLへのajaxリクエスト
注:たとえば、URLの作成にはMVDが使用されますが、旧式のUrl.Action( "controller"、 "action"、new {Client = Html.Selector.Name(r => r.Client)})も使用できます
- オン -アクションが正常に完了すると、アクションのシーケンスを実行します。たとえば、これはテンプレートを介したデータ挿入です
- AsHtmlAttributes -IMLコードを「暖かく信頼できる」RouteValueDictionaryにパックします
- ToDiv-ページでDivとして宣言します(任意のタグで可能)
構造図を理解する最も簡単な方法

IMLのその他の理由は何ですか?
IMLの主な利点を強調すると、次のようになります。
- JSなし -この機能が最も重要です。なぜなら、IMLを他のソリューションと区別するためです。
- 入力は最初の段落の効果です。JSクロージャーを勉強する必要はもうありません。ここで「var」が何であるか、関数に渡す引数の数を考える必要はありません。
- 標準 -宣言型言語はチームではるかに使いやすい
- JSON( REST API)およびクライアントテンプレート -多くのソリューションはこのようなバンドルで機能しますが、Incoding Frameworkにはすぐに使用できるすべてのツールがあります
ここで、C#を教えてください
C#言語はおそらく最も豊富な機能を備えており、Razorページ内でこれらすべてを使用できることが重要です。つまり、匿名関数、ラムダなど、アプリケーションをリファクタリングできるようにすることです。
- 独自のHtml拡張機能を開発し、別のページで再利用する機能。
@Html.Project().Load(setting => { setting.Template = Selector.Jquery.Id(tmplId); setting.Url = Url.Dispatcher().Query(GetCardsQuery { Client = Html.Selector.Name(r=>r.Client) }); })})
注:コードは、最初の例で検討したものと同じタスクを実行します
- ビューでMvcHtmlStringを構築するための匿名関数
@{ Func<bool, mvchtmlstring=""> createComplete = (value) => Html.When(JqueryBind.Change) .Do() .AjaxPost(Url.Dispatcher().Push(new SomeCommand { IsAdmission = each.For(r => r.IsAdmissionComplete) })) .OnSuccess(dsl => // something ) .AsHtmlAttributes() .ToCheckBox(value); } @using (each.Is(r => r.IsComplete)) { @createComplete(true) } @using (each.Not(r => r.IsComplete)) { @createComplete(false) }
大丈夫ですか?
以下は、Incoding Frameworkのマイナス面のリストです
- 小さなコミュニティはオープンソースプロジェクトのためのもので、志を同じくする人々を持つことが非常に重要ですが、これまでのところ、ツールは
当社といくつかの使い慣れたチーム - 私たちは勉強する必要があります-Incoding Frameworkの生産的な使用のために勉強する必要のある素材の削減に向かっていますが、このツールは開発サイクル全体をカバーしています
- ドキュメント-昨年、2つのプロジェクトがオープンソースで公開され、20のブログ投稿が公開されましたが、これまでのところすべての詳細が網羅されているわけではありません
おわりに
最初に、私たちの会社はさまざまなプロジェクトに携わっていると書きましたが、Incoding Frameworkが直面しているタスクの範囲は非常に大きいことを強調しました。 ほぼすべての企業が独自のフレームワークを開発していると多くの人が言うでしょうが、他のチームが使用できるツールを開発したように思えます。
PSフィードバックとコメントを聞いてうれしい