Microsoft .NETの著者であるDino Espositoへのインタビュー:企業向けアプリケーションの設計

Luxoft Trainingは、Dino Esposito .Netの第一人者、.Netプログラミングに関する多くの本の著者、JetBrainsのAndroidおよびKotlinの技術開発エバンジェリストのインタビューを提供します。 インテリアでは、ディノがモスクワで10月25日に開催される彼のワークショップ「リアルソフトウェアデザインのフレッシュルック:DDDとCQRSからイベントソーシングまで」について話します。









DINO ESPOSITO



長年の経験を持つトレーナーとクラス外のコンサルタント。 Dinoは、数千の.NET開発者およびアーキテクトの専門的成長に貢献した、いくつかの人気のMicrosoft Press書籍の著者です。 急成長中のプロスポーツソフトウェアおよびモバイルサービス企業のCTOとして、DinoはJetBrainsでのAndroidおよびKotlin開発の技術エバンジェリストであり、WURFL(モバイルデバイス情報データベースが使用するWURFLを実行するチームのメンバー) GoogleやFacebookのような会社によって。



こんにちは、ディノ。 CQRSとイベントソーシングのマスタークラスを実施します。 これらのアプローチについて話してもらえますか?



私の観察によると、現在、CQRSはほとんどすべてのアプリケーションにとって最も効果的な設計パターンです。 CQRSは、コマンドとクエリに細かく分割されたスタックを使用することについて語っています。 つまり、CQRSソリューションのクエリスタックは非常に単純で、通常はLINQまたはADO.NETのクリーンなトップレベルクエリレイヤーで構成されています。 通常のオプションのアプローチとは対照的に、コマンドのスタックは、タスク内のビジネスロジックを表示し、コマンド、イベント、およびそれらの同期によって実行します。

ケーキのアイシングのように、イベントソーシングは、サブジェクトエリアのエンティティに関連するすべてのイベントを保存し、それらをアプリケーションの優先データソースとして使用することに基づいています。

リレーショナルモデルを保存せず、システムの変更に関連するすべてのイベントを登録し、これらのイベントを順番に再現して、特定の時点でのエンティティの現在の状態を取得します。 実際の実装に関しては、マスタークラスで学ぶ追加の詳細がかなりあります。



CQRSの使用を推奨するタスクはどれですか?また、従来のCRUDを使用する方が適切なのはどこですか?



正直なところ、CQRSに特定の弱点はないと思います。 CQRSは、読み取り用のモデルとサービスで満たされたレベルと、コマンド実行用のモデルとサービスで満たされたレベルの2つの別々のレベルを使用できるテンプレートです。 そして、モデルとは何ですか-オブジェクト指向モデル、または関数のライブラリ、またはデータ転送オブジェクトのコレクション-一般に、これらはパフォーマンスの詳細です。 この声明に基づいて、CQRSはほとんどすべてのシステムに有益であり、そのプログラミングは以前よりも他のアプローチを必要としません。 また、これはあなたが何か新しくて恐ろしいことを学ばなければならないという意味ではありません。 結論として、この種のCQRSは、CRUDを使用するための最良かつ柔軟な方法です。



長年にわたり、DDDは複雑なビジネスシナリオのシンプルなソリューションと見なされてきました。 DDDとCQRSの関係は何ですか?



CQRSは、短いDDDのドメイン駆動設計の進化における次のステップと見なすことができます。 DDDは当初、特定の分野のすべての側面とプロセスをサポートできる、包括的で全体的なモデルのアイデアを推進しました。 10年以上にわたって、人々はDDDガイドラインに従ってシステムを構築するのに苦労してきました。 DDDを使用した一部のプロジェクトは最終的に機能し、一部のプロジェクトは失敗しました。 また、サクセスストーリーを伝えることもできますが、多くの人は、それがもたらす大きな利点にもかかわらず、問題指向の設計に取り組むことは難しいと依然として信じています。 大事なことは、多くの人にとって、DDDが有益であることを理解することは、DDDを使用することと失敗から生じる損害を理解することよりもはるかに具体的ではないようです。 このコンテキストでは、CQRSは通常のアプローチを破ります。 1つの包括的なモデルは、しばしば複雑すぎて威圧的です。 最後に、どのようなアプリケーションで何をしますか? ユーザーインターフェイスコマンドを実行し、データを要求するだけです。 次に、2つのレベルを分離します。 最終的に、これはCQRSでできることです-コマンドの実行とデータの要求に関連する責任の領域を分離します。



あなたはソフトウェア開発に関する多くの本の著者です。 エンタープライズアプリケーションアーキテクチャに関する最新の本は、単に本棚にヒットするだけです。 読者にどんなメッセージを伝えたいですか?



開発者として、私たちはマーフィーの法則、特にソフトウェア開発に関するマーフィーの法則を知っています。 私のお気に入りは、「スケジュールや予算でまだ何も作成されていないこと」です。 そして、あなたのソフトウェアが表示するサブジェクト領域について可能な限り勉強し、学習することに加えて、あなたはこれでほとんど何もすることができません。 最終的に、実際のプロセスの再現を最大化するプログラムを作成します。 それらを知る必要があります。 対象分野の仕組みを完全に理解する必要があります。 専門家の言語を知っている必要があります。 ユーザーの要件を把握し、ソフトウェア製品を計画および設計するために、これらすべてが必要です。



ワークショップの対象読者は誰ですか? 誰が最も恩恵を受けるのか-初心者開発者か経験者か?



一見したところ、建築家と上級開発者はマスタークラスの理想的なリスナーと言えます。 しかし、ほとんどの建築家がマスタークラスで議論したほとんどのトピックについて聞くことができるという意味で、このクラスの何も完全に新しいものではないと言うこともできます。 したがって、.Net開発者がこのクラスを自分自身にとって有用であると思うことを止めたいと思います。 また、このマスタークラスは、建築家になりたい人に役立ちます。 おそらく初心者と経験豊富な開発者にとってのメリットは同じではないでしょうが、誰もがこのクラスから多くの有用なものをもたらすと思います。 この立場を強化するために、冗談を言ってみましょう。 これは1999年のTechEd Europeでの私の最初の英語公演中に起こりました。 私は非常に興奮していましたが、同時に怖くて、ホールが空になることを望みました。 しかし、聴衆に入ったとき、当時のWindows / COM開発者の神であるドンボックスがすでに最前列にいることがわかりました。 彼は私を待っていて、立ち上がって言った:「私はあなたから学ぶためにここにいる」。 「ドン」と答えた。「あなたは神のようだ。」 「彼は時々私の頭に浮かぶフレーズを言った:「ディノ、それはすべて見通しについてだ!」



マスタークラスを訪問するすべての人は、初心者でも経験豊富な開発者であっても、将来自分自身にとってユニークで価値のあるものを見つけると確信しています。



次のDino Espositoワークショップは、2014年10月25日のCEE-SECR会議の最終日にモスクワで開催されます。



All Articles