CommentHHVM/Hackで作る独立コアレイヤパターンytakeです。Architecutre?堅実なアプリケーション作りみなさんが目指すものではありますが、これを実現するための方法はたくさんあります。PHPの現場でもおなじみの新原さんが下記のブログを執筆しました。独立したコアレイヤパターンクリーンアーキテクチャをわかりやすく解説されていて、まさに開発現場で活きる考え方と実践方法で、お使いのフレームワークを問わず導入することができると思います。多くのPHPアプリケーションで取り入れることができます。今回、Hackを利用したアプリケーションでこのパターンを採用した場合に、どうやって実装するのか、をHackの機能も併せて解説します。コアレイヤサービスのポートを用意します。Hackの厳格モードを意味します。}}phpのコードと大きな差はありませんが、大きな差はコンストラクタへの記法くらいです。PromotionというHackで用意されている機能です。対するアダプタ実装です。}}このコードもphpのコードと大きな差はありません。このアプリケーションは拙作のHack専用フレームワーク製ですが、DIコンテナが組み込まれているため、インスタンス生成指定方法を多くのphpフレームワークと同等に記述することができます。}}このサンプルアプリケーションではDBを利用していませんが、GetAccountAdapterがあることによって、どんなデータベースやデータストレージでも構いません。AccountStorageクラスコアレイヤーパターン外のものですが、Hackの実装コードを紹介します。このサンプルにはHackのMap、Vectorを使ったデータ取得処理があります。これはイミュータブルVectorと、Mapの組み合わせです。所謂Collectionクラスを簡単に操作することができます。filterCollectionの操作には豊富なメソッドがたくさん用意されています。Scalaなどに慣れている方にはお馴染みの記法です。)->get(0);Shapeshapeを使って、配列のフィールドに対して型指定をすることができます。shape自体は下記として定義しています。string,);利用時にはshapeでそのまま記述します。);Entityなどのクラスでは、以下のように利用することができます。Shapes::idxはshapeのフィールドから値を取得するメソッドです。非常に堅いアプリケーションになるのがわかると思います。}}GenericsHackではGenericsを利用することができます。ValueObjectやDTOといったオブジェクトを簡単に表現できます。継承されるコンストラクタに制約をかけることができます。ConsistentConstruct値の検査が必要な場合は次のようになります。}}値表現だけであれば、次のようになります。{}ルーティング+ユースケースADRを採用しているフレームワークとなっていますので、ルーティングに対応したActionクラスは次の通りです。前述のServceiModuleクラスに記述すると、DIコンテナが実行時にインスタンス生成を行います。}}ルーティングはフレームワークで用意されていますので、enumとImmMap、shapeで記述します。},];今回のサンプルにはRepositoryなどはありませんが(小さいので用意していません)、ビジネスロジックであるコアのレイヤーはフレームワークの知識が入り込むことはなく、フレームワークとアプリケーションが分離された状態となります。クリーンなアーキテクチャを表現する手法はたくさんありますので、いろんな手法を試してみてください。IT」の未来に挑戦したいエンジニアを積極的に採用しております。ご興味を持って頂けた方は下記リンクからご応募下さい。SiteOrigin.。