
spring
R2DBC と Repository パターンについての現時点での評価と所感
R2DBCもだいぶ成熟してきたのかなと思い使ってみたところ、ちょっと思ってたのと違ったので、そのメモ。結論から。誤解を恐れずに端的に言うならば、DDDを意識したプロジェクトの場合、R2DBC(ReactiveProgramming)は現時点で採用に値しない。これに尽きます。R2DBCだけではなく、ReactiveProgramming全体にまで言及しているのは、R2DBCを採用せず、WebFluxだけ採用してもリソース効率の最適化といった点において、あまり大きな効果を発揮できない(犠牲になる保守性に対して、採用するだけの価値が見出だせない)ためです。採用に値しないとまで断じた理由を以下、メリット・デメリットを挙げながら確認していこうと思います。メリットわたしの理解しているReactiveProgramming最大のメリットとは、リソース効率を最適化することです。処理の遅延評価を進め、パイプ2020.09.13
Spring 初学者が最初に知るべき責務とレイヤーと DDD (2020年 改訂)
DDDが身近になり、適用ハードルもずいぶん低くなってきたように感じてきていたため、以前のポストからところどころ書き直しました。レイヤードアーキテクチャSpringでは各コンポーネントの責務に応じたステレオタイプアノテーションが用意されており、これらがどう連携するかについては、レイヤードアーキテクチャをイメージすると理解しやすいです。Springでの各コンポーネントは、以下のように連携します。また、いくつかのアノテーションは、ドメイン駆動開発にそのヒントを得て用意されているため、実際のクラスやパッケージの配置については、もう少しDDDに気を使ったものとするのが良いでしょう。具体的には以前のポストでも使用した、以下の図を参考にしてみてください。トランザクションスクリプトとDDD以下、各コンポーネントについて、簡単に説明してみます。ViewSpringにおけるビューは、一般的なHTMLページを構2020.09.02
トランザクションスクリプトとDDD
エヴァンスが2003年に書籍Domain-DrivenDesignで紹介してから早17年。やっと時代が追いつき、近年ではこれまでにないほどDDDが注目を集めている。注目が高まるとともに、DDDを取り扱う良質な書籍も増え、私自身も複数のDDDの実践を経て、以前よりも理解は進んできたように思う。そこで、私の現時点でのDDDに対する解釈を、一度ここに書き起こし、残してみようと思う。(これはあくまで現時点での解釈であり、解釈のアップデートがあれば書き換えるかもしれない。)なお本稿では、ドメインエキスパートや、ユビキタス言語といった、DDDのプロジェクトへの適用側面には触れず、あくまでプログラミングする際にどのように理解、適用していけばよいかを中心に見ていく。2011年9月、SpringFramework3.0.6がリリースされて間もない頃、SpringのAPIドキュメント内にDDDの文字を見つける2020.09.01
KotlinでJPA使用時にデフォルトコンストラクタ要求を回避する
KotlinでJPAを使用する場合、エンティティクラスにデフォルトコンストラクタが存在しないと、以下のような例外がスローされます。org.springframework.orm.jpa.JpaSystemException:Nodefaultconstructorforentity::..;nestedexceptionisorg.hibernate.InstantiationException:Nodefaultconstructorforentity::..これはJPA実装のひとつであるHibernateが、エンティティクラスのインスタンス生成時に、引数付きコンストラクタではなく、デフォルトコンストラクタを使おうとするために発生する例外ですが、Kotlinでは、コンストラクタとプロパティを一緒に記述できるため、多くの場合デフォルトコンストラクタが用意されません。Kotlinでデフォルト2019.02.26
Spring Bootプロファイルの指定あれこれ
SpringBootにはプロファイルという、環境ごとの設定やBean構成のロードを切り替える機能があります。プロファイルは、名前ベースで切り替えることができ、とても直感的に使うことができて便利です。ところが少し変わったことをしようとすると、途端に躓いてしまう部分でもあるので、プロファイルをもう一歩踏み込んで使うためのポイントをいくつかまとめてみます。要件環境Java8Kotlin1.2.41SpringBoot2.0.4.RELEASE基本的な使い方以下のようなテストがあった場合に、userへ何がDIされるかをプロファイルを使って切り替えてみます。@RunWith(SpringRunner::class)@SpringBootTestclassDemoSpringProfileApplicationTests{@Autowiredlateinitvaruser:User@Testfunco2018.08.11
Springで外部APIをリクエストする場合のテスト
外部APIをリクエストしている機能のテストをしたい場合、Springでは、MockRestServiceServerを使います。MockRestServiceServerを使うと、RestTemplateがリクエストしたURL等の条件に応じて、期待したレスポンスを返すようにテストを構成できるようになります。また必要に応じて、モックされたリクエストが、正しく順番通りに使用されたかどうかも検証できます。なお、今回のサンプルコードは以下にあるので、こちらも参考に。https://github.com/yo1000/example.MockRestServiceServer/tree/master/MockRestServiceServer-client要件Java1.8.0_121Maven3.5.3Kotlin1.2.41SpringBoot1.5.12.RELEASE$./mvnw-vApa2018.06.09
Spring初学者が最初に知るべき責務とレイヤー
こちらのポストは随分と内容が古くなってきたため、新たに書き直しました。Spring初学者が最初に知るべき責務とレイヤーとDDD(2020年改訂)このポストは、過去にQiitaで書いたものを改訂したものです。新年度を迎えるたび、Qiitaでのポストへたびたび「いいね」がつくので、入社等をきっかけに、新たな環境ではじめてSpringに触れる方もきっと多いのでしょう。自分の周囲に対しても、Springを説明する際によく使用していたポストだったので、内容の見直しも兼ねて、こちらのサイトに改訂版としてポストしておこうかと。レイヤーアーキテクチャSpringでは各コンポーネントの責務に応じたステレオタイプアノテーションが用意されており、これらがどう連携するかについては、レイヤーアーキテクチャをイメージすると理解しやすいです。Springでの各責務レイヤーは、以下のように連携します。各レイヤーの責務各レ2018.05.22


