エムスリーテックブログスマートフォン用の表示で見るエムスリーテックブログエムスリー(m3)のエンジニア・開発メンバーによる技術ブログです2019-04-18TypeScript用のDIライブラリを公開しましたエンジニアリンググループの冨岡です。TypeScript向けのDIライブラリを公開したので紹介します。Architecture等の設計手法を使ってコードを書いていると、抽象に依存することが多くなってきます。InMemoryUserAccountRepository());テストしやすく、また責務がはっきりわかれていて良いですよね。別の辛みもいくつかでてきます。インスタンスの組み立てが巨大で、かつ順番に依存にした複雑な処理になる本番用とテスト用など、共有したい部分とそうでない部分がでてきてうまく管理するのが面倒になってくるこういった辛みに対応するのがDIライブラリです。私の調べた限りでは、既存のDIライブラリは少し大げさな印象でした。メジャーなライブラリであるInversifyJSは、decoratorをベースにしており大げさ&マジカルです。依存先を容易に切り替えられる既存のライブラリの利点は残しつつ、以下を満たすシンプルなライブラリがほしいと思いました。依存をシンプルに表現できる変な魔法を使わず、明示的であるそこで作ったのがこのtypesafe-diです。機能と特徴の紹介まずはDesignという設計図のようなものを作ります。基本的には、あるキーと、紐づくインスタンス生成に必要なfactoryのペアを持ったimmutableなオブジェクトです。単なる型エイリアスです。必要なことを型で明示しています。));最後に未解決の依存を注入することで、コンテナを生成します。}この際、必要な依存が足りていないとコンパイルエラーになるのがポイントです。design.resolve({});これがコンパイルエラーになってくれることで、未完成なDesignを安全に扱うことができます。adapterに依存している。このままではインスタンス化できないが、再利用できる。useCasesDesign.merge(testAdapterDesign);適度にコードを分割して、型安全にDesignを整理することができそうです!また、リソースの開放のための仕組みも用意しています。依存関係に従って、依存元から順番に終了処理を行うことでお行儀よくリソースの後始末ができます。finalize();まとめTypeScriptを使ったシンプルなDIライブラリを作りました。ORM機能は使いません)物資難の時代、化学者はカップ酒をビーカー代わりに使った・・...2019-01-11Pythonのパッケージ周りのベストプラクティスを理解する砲撃する自走砲(PzH2000自走榴弾砲)。月別アーカイブ注目記事はてなブログをはじめよう!m3techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。