API構築の基礎を学んだ。QConは、開発者コミュニティにおける知識とイノベーションの普及を促進することで、ソフトウェア開発に力を与える。実務者主導のカンファレンスであるQConは、チーム内のイノベーションに影響を与える技術チームのリーダー、アーキテクト、エンジニアリングディレクター、プロジェクトマネージャー向けにデザインされている。Sheehy氏は、人工知能ハイプ時代における責任ある開発者としてのあり方について、洞察に富んだ開会基調講演をした。Grizzanti氏が、「スタッフ・プラス」への道と、それを「科学」というより「芸術」としてとらえ、芸術を創作することとソフトウェアを創作すること、そして組織のダイナミクスに対処することの類似性について語っている。Codeを採用する:確認するべき6つの適性LCNC(ローコード/ノーコード)プラットフォームは、プログラマーだけでなくプログラマーでなくても、最小限のコーディングとワンクリックのデプロイメントで、アプリケーションソフトウェアを開発できるよう設計されている。ドラッグ&ドロップ方式のインターフェースなどを利用することで、開発・デプロイメントプロセスを簡素化し、効率的なアプリケーション開発とデプロイメントを実現する。2.0リリースには批判すべき点が多いが、好ましい部分も少なくはない。本記事では、今回のリリースのハイライトをいくつか紹介する。テーブル分割ORMに対する一般的な批判は、効率の悪いデータ要求が実行される傾向のあることだ。*”クエリを実行するため、アプリケーションに必要なのがごく小さなサブセットであっても、データベースに対してすべての列が要求されることになる。これまでのEFでは、これに対処する方法として、生成されるSQLを必要な列のみに限定する.Select句を使用していた。これには、サードパーティ製のマッピングライブラリ(AutoMapperのような)か、あるいは投影されたオブジェクト毎に必要な列を明示的にリストする必要がある。後者は面倒でエラーも起こしやすいので、先を急ぐ場合にはこのステップを省略することも多い。indexes)を利用できないため、パフォーマンスの乏しいクエリが実行されることになる。ひとつの問題は、投影されたオブジェクトがCRUD操作に参加できないことだ。エンティティにマップするか、SQLコールを直接使用する必要がある。splitting)”を使用することだ。この方法では、複数のクラスを同じテーブルにマップする。Coreでこれを使うためには、“(外部キーが主キーを形成する)識別関係が、テーブルを共有するすべてのエンティティ間で設定されている”ことが必要だ。Coreでは解決されている。グローバルフィルタを使用すると、特定のテーブルにヒットするすべてのクエリにフィルタを適用することができる。これが使用されるのは、主としてソフトデリートのシナリオである。データベースからの物理的な削除を行なわずに、削除フラグの付けられた行を返さないようにすることが可能になる。Chainなど、他のORMにも見られる概念だ。Coreでは、OnModelCreatingイベント内で次のようなコードを使って実装する。!p.IsDeleted);この構文には、isDeleteフラグをサポートするすべてのテーブルについて、同じことを繰り返さなければならないという問題がある。テーブルの数が多い場合はエラーの原因ともなるが、クエリ毎に忘れずにチェックするという方法に比べれば、はるかに優れている。グローバルフィルタは、DbContextオブジェクトで宣言されたフィールドにアクセスすることができる。これはつまり、マルチテナンシなどの高度なシナリオでも利用可能である、ということだ。コンテキストプールでこれを行なう場合は、細心の注意が必要である(下記参照)。ドキュメントには2つの制限が記されている。ナビゲーション参照は許可されない。この機能は、開発者からのフィードバックによって追加される可能性がある。フィルタが定義可能なのは、階層のルートエンティティタイプ上に限られる。コンテキストプールデータベースの接続に比べればはるかに小さいが、DbContextオブジェクトの生成においてもパフォーマンス低下の可能性がある。理想的なソリューションはDbContextをスレッドセーフにすることだが、EFの設計上それは不可能だ。CoreではDbContextプールが提供されるようになった。Coreの依存性注入フレームワークが使用されている。ドキュメントには注意点として、マルチテナンシ用のグローバルフィルタと併用できないことが記されている。DbContext派生クラスで保持する独自の状態(プライベートフィールドなど)をリクエスト間で共有したくない場合は、DbContextプールを使用しないでください。CoreはDbContextインスタンスをプールに追加する前に、自身が認識している状態のみをリセットするからです。これはDIフレームワークからコールされる“reset”メソッドあるいはイベントを用意すれば簡単に解決する問題だが、将来のバージョンでは修正されることを望みたい。スカラ関数リレーショナルデータベースサーバの大きな特徴は、データの存在する場所でコードを実行できることだ。分別を持って利用すれば、処理前にアプリケーションにデータを転送する場合に比べて、大幅なパフォーマンス改善が実現できる。2はこれを、スカラ関数を公開することでサポートする。スカラ関数は、DbFunction属性でタグ付けされた空の静的関数を使って、EFモデル内に定義されている。LINQプロバイダがこれらの利用を検出して、サーバ上の対応する関数を使用するSQLを生成する仕組みだ。Coreでは、スカラ関数のみをこの方法でサポートしている。これよりも強力なテーブル値関数を使うには、現時点では生のSQLを使用する以外に手段はない。Coreにおける文字列補間の動作方法だ。CoreではパラメタライズドSQL文字列を生成する。SQLインジェクション攻撃を回避する上で、このことは非常に重要だ。@p0今後はさまざまなマイクロORMが、このテクニックを採用するものと期待される。明示的にコンパイルされたクエリクエリはデリゲート(すなわち関数ポインタ)の形でキャッシュされるようになった。通常これは、匿名メソッドによって定義される。パフォーマンス向上に加えて、複数の場所でクエリを参照する上でも都合のよい方法だ。デリゲートはDbContextオブジェクトをパラメータとして受け取るので、マルチテナントのトランザクション内で使用することができる。キャッシングは自動的に実行される場合もあるため、明示的なコンパイルによるパフォーマンス向上は限定的である点に注意が必要だ。Coreは、クエリを自動的にコンパイルした上で、クエリ式のハッシュ表現に基づいてキャッシュしますが、このメカニズムでは、ハッシュ計算とキャッシュ検索をバイパスして、デリゲートの呼び出しを通じてコンパイル済みクエリを使用することにより、わずかですがパフォーマンスを向上することが可能になります。これらの新機能は無償ではない。2.0の非互換変更について取り上げる。毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。Inc.プライバシーBT。