SlideShare a Scribd company logo
1 of 89
Download to read offline
JJUG CCC 2017 fall
DDD x CQRS -
更新系と参照系で異なるORMを併用して上手くいった話
2017/11/18
株式会社ビズリーチ
松岡 幸一郎
● 松岡 幸一郎
● 株式会社ビズリーチ
● @little_hand_s
● #ccc_m4
発表者紹介
最近こんなCMしてる会社です
自己紹介
Java
技術遍歴
SIer時代
Java
技術遍歴
SIer時代
Excel
技術遍歴
Excelはもういい
Java
技術遍歴
SIer時代
Excel
Spring Boot
DDD・CQRS
Vue.js
現職
DDD x CQRS
更新系と参照系で
異なるORMを併用して
上手くいった話
テーマ
DDD x CQRS
更新系と参照系で
異なるORMを併用して
上手くいった話
テーマ
ブログで細々とDDD布教中
http://little-hands.hatenablog.com/
なんですが
DDD x CQRS
更新系と参照系で
異なるORMを併用して
上手くいった話
テーマ
←今日のメイン
DDDとは
● Domain Driven Design(ドメイン駆動設計)の略称
● ドメインとは
○ 「アプリケーションの中心となる業務領域」のこと
● 原則
○ ドメインとドメインロジックを中心に設計する( ≠ データモデル中心)
○ 複雑なロジックをドメインモデルに寄せる(オブジェクト志向に則る)
○ ドメインエキスパート(業務の専門家)と継続的にコミュニケーションし、モデルを改善し続ける
● メリット
○ ステークホルダー間のコミュニケーションが容易になる
○ ソースの可読性、変更容易性、メンテナンス性が高まる
● EricEvansによる定義
DDDとは
● Domain Driven Design(ドメイン駆動設計)の略称
● ドメインとは
○ 「アプリケーションの中心となる業務領域」のこと
● 原則
○ ドメインとドメインロジックを中心に設計する( ≠ データモデル中心)
○ 複雑なロジックをドメインモデルに寄せる(オブジェクト志向に則る)
○ ドメインエキスパート(業務の専門家)と継続的にコミュニケーションし、モデルを改善し続ける
● メリット
○ ステークホルダー間のコミュニケーションが容易になる
○ ソースの可読性、変更容易性、メンテナンス性が高まる
● EricEvansによる定義
略
DDD x CQRS
更新系と参照系で
異なるORMを併用して
上手くいった話
テーマ
まず、
CQRSに関する誤解を解きたい
テーマ
まず、
CQRSに関する誤解を解きたい
テーマ
(※個人の見解です)
CQRSは
イベントソーシングと
セットで行う必要がある
テーマ
CQRSは
イベントソーシングと
セットで行う必要がある
テーマ
CQRSは
イベントソーシングと
セットで行う必要がある
テーマ
CQRSは単独で適用できます
CQRSとは
● CQRSとは
○ Command Query Responsibility Segregation
コマンドクエリ責務分離
○ 書き込み用のモデルと読み込み用のモデルを分ける設計パターン
CQRSとは
CQRSの提唱者
● Greg Young
○ DDD + CQRS + イベントソーシングを推している
そのため、CQRSとイベントソーシングがセットで語られがち
→ 本質的には別のもの
● なぜモデルを分ける必要があるのか?
● モデルを分けるとはどういうことなのか?
→ 背景から説明します
CQRS背景
● 一般的なシステムでは、書き込みと読み込みの両方が、
単一のデータストアで同じモデルを使用する
● テーブルに対応したオブジェクトがあり、それを使用してCRUD操作する
CQRS背景
DBData ModelUser Interface
Application
IF
IF
● システムが大きくなるほど、
○ 書き込み:制御は複雑になっていく
○ 読み込み:複数テーブルの情報をまとめて加工する必要性が高まっていく
→ 一つのモデルに関する処理がどんどん複雑になっていく
CQRSが必要な背景
● システムが大きくなるほど、
○ 書き込み:制御は複雑になっていく
○ 読み込み:複数テーブルの情報をまとめて加工する必要性が高まっていく
→ 一つのモデルに関する処理がどんどん複雑になっていく
CQRSが必要な背景
● そもそも、書き込み・読み込みで要件が大きく異なる
○ 整合性か、速度か
○ オブジェクトの形か、結合や集計した形か(モデル表現の違い)
○ トラフィック数は圧倒的に読み込み処理が多い
○ パフォーマンス要件は異なることが多い
  → どこかにしわ寄せ、妥協が発生する
CQRSのステップ
CQRSのステップ
● 段階的CQRS
a. 書き込み / 読み込みモデルを分離する
b. 書き込み / 読み込みデータストアを分離する
c. イベントソーシングと統合する
 → 要件を見極めてどうするか判断すればよい
CQRS - 1.単一物理データストアモデル
● 書き込みと読み込みのモデルを別物として用意する
DB
Data
Model
User
Interface
Application
IF
IF
CQRS - 1.単一物理データストアモデル
● 書き込みと読み込みのモデルを別物として用意する
DB
Data
Model
User
Interface
Application
IF
IF
DB
User
Interface
IF
IF
Write
Model
Read
Model
CQRS - 1.単一物理データストアモデル
● 書き込みと読み込みのモデルを別物として用意する
● 書き込みモデル:
テーブル毎に対応したエンティティ等
● 読み込みモデル:
テーブルをJoinした結果、SQL viewの取得結果1行などを1モデルとする
 → それぞれ適したモデルを扱えるので、処理効率が良い書き方ができる
  コードがシンプルになる
DB
Data
Model
User
Interface
Application
IF
IF
DB
User
Interface
IF
IF
Write
Model
Read
Model
CQRS - 2.複数物理データストアモデル
● 書き込みと読み込みのデータストアを物理的に分離する
DB
User
Interface
IF
IF
Write
Model
Read
Model
CQRS - 2.複数物理データストアモデル
● 書き込みと読み込みのデータストアを物理的に分離する
DB
User
Interface
IF
IF
Write
Model
Read
Model
Write Data
Store
Read Data
Store
User
Interface
IF
IF
Write
Model
Read
Model
CQRS - 2.複数物理データストアモデル
● 書き込みと読み込みのデータストアを物理的に分離する
● Read Data Store
○ シンプルなのはread-onlyのレプリカ
○ 全く別の機構を選択することも可能 (Readをelastic searchにするなど)
 → 参照/更新のストア分離により、それぞれの負荷に合わせたスケーリングが可能
  異なるアーキテクチャのデータストアを利用可能
DB
User
Interface
IF
IF
Write
Model
Read
Model
Write Data
Store
Read Data
Store
User
Interface
IF
IF
Write
Model
Read
Model
● すべてのアクションを「イベント」として記録する設計パターン
既存のデータのupdateは一切しない
○ Writeモデルは「イベント」として記録される
○ Readモデルはそこから特定の形に変形される
MaterializedViewや物理的なデータを別途生成する、など
CQRS - 3.イベントソーシング
(@little_hand_s から参考資料たどれます「イベントソーシングの参考資料」 )
Write/Readで
ORMを分ける
分離のメリット・デメリット
メリット デメリット
1.モデル分離 処理効率が良い書き方ができる
コードがシンプルになる
readモデルにwriteモデルの制約を
効かせられなくなる
2.データソース
分離
Read / Writeを分離してスケールさせること
ができる
設計の幅が広がる
データ同期の仕組構築 /メンテコストが必要
3.イベント
ソーシング
データ追跡しやすい
ミューテーション排除によるバグ抑止
インピーダンスミスマッチとの決別
導入難易度がが一気に上がる
導入・教育コストが高い
分離のメリット・デメリット
メリット デメリット
1.モデル分離 処理効率が良い書き方ができる
コードがシンプルになる
readモデルにwriteモデルの制約を
効かせられなくなる
2.データソース
分離
Read / Writeを分離してスケールさせること
ができる
設計の幅が広がる
データ同期の仕組構築 /メンテコストが必要
3.イベント
ソーシング
データ追跡しやすい
ミューテーション排除によるバグ抑止
インピーダンスミスマッチとの決別
導入難易度がが一気に上がる
導入・教育コストが高い
→ ORMも適正に合わせて使い分ければ、このメリットをより大きくできるのではないか?
CQRSのオプション
各オプションは要件に応じて好きに組み合わせて良い
単一物理ストア
複数物理ストア
データストア
Read / Write
異なるモデル
Read / Write
同じモデル
モデル
×
しない
する
イベント
ソーシング
×
単一ORM
複数ORM
ORM
×
CQRSのオプション
各オプションは要件に応じて好きに組み合わせて良い
単一物理ストア
複数物理ストア
データストア
Read / Write
異なるモデル
Read / Write
同じモデル
モデル
×
しない
する
イベント
ソーシング
×
→ メリット/デメリット、コストを考慮し、今回はこのような構成を選択
単一ORM
複数ORM
ORM
×
Write/Read ORMの要件
● Write Model ORM
○ オブジェクト志向でモデルに振る舞いをもたせたい
・DDDの思想を反映
○ テーブルに対応したオブジェクト
Write/Read ORMの要件
● Write Model ORM
○ オブジェクト志向でモデルに振る舞いをもたせたい
・DDDの思想を反映
○ テーブルに対応したオブジェクト
● Read Model ORM
○ 複数テーブルをjoinしたり、集計したりしたい
○ 効率の良いクエリが書きたい
○ 実行されるクエリを制御したい
Write/Read ORMの要件
● Write Model ORM
○ オブジェクト志向でモデルに振る舞いをもたせたい
・DDDの思想を反映
○ テーブルに対応したオブジェクト
● Read Model ORM
○ 複数テーブルをjoinしたり、集計したりしたい
○ 効率の良いクエリが書きたい
○ 実行されるクエリを制御したい
 → この要件に合うようにORMを選定する
ORMのパターン
中心 SQLロジックの組み込み方法 代表的プロダクト
オブジェクト
中心
オブジェクトリレーショナルマッピングを通じ
てJavaに組み込む
Hibernate、(ActiveRecord)
SQL中心 Java外 - XMLなどの設定ファイル MyBatis、SQL view、
ベンダー特有のストアドプロシージャ
Java内 - String文字列 JDBC、JPAネイティブクエリ
Java内 - 独自DSL jOOQ、JPQL
ORMのパターン
中心 SQLロジックの組み込み方法 代表的プロダクト
オブジェクト
中心
オブジェクトリレーショナルマッピングを通じ
てJavaに組み込む
Hibernate、(ActiveRecord)
SQL中心 Java外 - XMLなどの設定ファイル MyBatis、SQL view、
ベンダー特有のストアドプロシージャ
Java内 - String文字列 JDBC、JPAネイティブクエリ
Java内 - 独自DSL jOOQ、JPQL
 → 先述の要件を踏まえ、3つのORMでメリット/デメリット検討
jOOQとは
● DBスキーマからDBアクセス用オブジェクト生成
● DSL中心でクエリビルド、実行できるORM
● かなりSQLに近い書き方、かつタイプセーフにSQLが書ける
メリット デメリット
Hibernate
(Spring Data JPA)
モデルに振る舞いを持たせやすい
SpringDataJPAがDDDを想定した仕様
仕様の理解しにくさ、キャッシュなどのトラブ
ル、想定外の挙動 etc..
MyBatis SQLを直接かけるのでシンプル、安心 SQLがテキスト記述、
XMLに設定を書くのは今時結構辛い
jOOQ タイプセーフなDSLで書きやすい、
読みやすい
オブジェクトリレーションの表現に
制限あり
ORM選定
メリット デメリット
Hibernate
(Spring Data JPA)
モデルに振る舞いを持たせやすい
SpringDataJPAがDDDを想定した仕様
仕様の理解しにくさ、キャッシュなどのトラブ
ル、想定外の挙動 etc..
MyBatis SQLを直接かけるのでシンプル、安心 SQLがテキスト記述、
XMLに設定を書くのは今時結構辛い
jOOQ タイプセーフなDSLで書きやすい、
読みやすい
オブジェクトリレーションの表現に
制限あり
ORM選定
→Writer Model ORMにHibernate、Read Model ORMにjOOQを採用
CQRSを適用するための
アーキテクチャ
● 一般的な3層アーキテクチャの問題
○ Write/Readのモデル使用範囲を明確に分けられない
○ BusinessLogic層がFatになりやすい
アーキテクチャ
Business
Logic
Data
User
Interface
Infrastructure
● 業務ロジックをドメイン層に凝集する
● アプリケーションサービス層はドメイン層が許可した操作を必要に応じて呼ぶ
● この辺りはDDDの思想に基づいた設計
アーキテクチャ
Business
Logic
Data
User
Interface
Infrastructure
Application
Service
Domain
Model
User
Interface
Infrastructure
(@little_hand_s から参考資料たどれます
「ドメイン駆動 + オニオンアーキテクチャ概略」 )
interface
アーキテクチャ
Application
Service
Domain
Model
User
Interface
Infrastructure
Application
Service
Domain
Model
User
Interface
Infrastructure
実装クラス
● ドメイン層をPOJOにするために依存関係を逆転する
● ドメイン層が公開したIFに対してインフラ層が実装する設計
● ドメイン層をWrite Model (ドメインモデル)とRead Modelに分割する
● インフラ層の実装クラスをWriteとReadで異なるORMで実装する
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
Application
Service
Domain
Model
User
Interface
Infrastructure
interface
実装クラス
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Repository
Entity
Repository Impl
<<interface>>
Query Serivce
DTO
Query Serivce
Impl
Spring Data
JPA
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Repository
Entity
Repository Impl
<<interface>>
Query Serivce
DTO
Query Serivce
Impl
Hibernate
Hibernate(アノテーションだけ)
Spring Data
JPA
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Repository
Entity
Repository Impl
<<interface>>
Query Serivce
DTO
Query Serivce
Impl jOOQHibernate
Hibernate(アノテーションだけ)
サンプルコード
サンプルコード
Task
タスクID
タスク名
ステータス
User
ユーザーID
ユーザー名
作成者
担当者
● シンプルなタスク管理アプリケーションを想定
● タスクの制約
○ 作成時の制約
■ 「作成者」と「担当者」として実在のユーザーを持つ
■ 常に「未完了」状態で作成
○ 変更時の制約
■ 名前は変更できない
■ 完了/未完了の制御だけできる
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Repository
Entity
Repository Impl
<<interface>>
Query Serivce
DTO
Query Serivce
Impl
Hibernate(アノテーションだけ)
サンプルコード Domain Model(entity, repository)
Entity
Repository
ポイント
①entityが保持する値はUserのIdでLong型だが、
引数をUserにすることでTypeSafeになる
②必ず"未完了"の状態でインスタンス生成、
 という制約をコンストラクタで表現
③ステータス更新用のメソッドは公開されているが、
nameは更新用メソッドを公開しないことにより
「名前を変更できない」という制約を表現
①
②
③
コンストラクタと公開メソッドで制約を表現
コンストラクタ
状態遷移用メソッド
(@little_hand_s から参考資料たどれます
「モデルでドメイン知識を表現するとは何か」 )
サンプルコード Application Service
ApplicationService(新規作成)
ApplicationServiceの引数 ApplicationServiceの戻り値
サンプルコード Application Service
ApplicationService(更新)
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Repository
Entity
Repository Impl
<<interface>>
Query Serivce
DTO
Query Serivce
Impl
ポイント
・POJOで引数と戻り値の関係だけ定義
→「ライブラリ何使うかは任せるけど、
この条件で指定したらこういう形で返してね」
という宣言をしている
サンプルコード queryService
クエリモデルのサービス IF
引数
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Repository
Entity
Repository Impl
<<interface>>
Query Serivce
DTO
Query Serivce
Impl jOOQ
サンプルコード queryServiceImpl
その他のクエリ部分
①クエリライクにJavaコードでselect,
from, join条件を書いている
②resultをfetch後に戻り値の方に
mapしたものをreturnしている
③条件指定の方法は次のページ
①
②
③
・引数オブジェクトの値をjOOQのConditionオブジェクトにマッピング
・引数オブジェクトのパラメータを取得するメソッドをOptionalで返せば、
 値があるときだけ条件指定、ということも可能
・引数のパラメータを増やせば検索の拡張も簡単
サンプルコード queryServiceImpl
条件指定部分
Spring Data
JPA
アーキテクチャ
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Repository
Entity
Repository Impl
<<interface>>
Query Serivce
DTO
Query Serivce
Impl jOOQHibernate
Hibernate(アノテーションだけ)
導入結果
導入結果
● 実際どうだった?
導入結果
● 実際どうだった?
→かなり使い勝手が良いです!!
導入結果
● 実際どうだった?
→かなり使い勝手が良いです!!
● Read Model
○ Hibernateの得意な部分は活かしつつ、
参照系ではまりがちなHibernateの使い方に悩む時間を一切カット
(クエリを書いた通りに動く)
○ 検索条件の拡張も快適
● 実際どうだった?
→かなり使い勝手が良いです!!
● Read Model
○ Hibernateの得意な部分は活かしつつ、
参照系ではまりがちなHibernateの使い方に悩む時間を一切カット
(クエリを書いた通りに動く)
○ 検索条件の拡張も快適
● Write Model
○ DDDとSpring Data JPAの相性は抜群
 RepositoryのIFだけ書けば実装クラスを作ってくれるのはとても楽
○ writeモデルに振る舞いを凝縮している安心感、読みやすさ◎
導入結果
Q&A
Q&A
● そもそも2つのORM同時に使っていいの?
Q&A
● そもそも2つのORM同時に使っていいの?
→前述の通りjOOQ公式で紹介されている使い方
(@little_hand_s から参考資料たどれます
「jOOQ関連リンク」)
Q&A
● テストはどうしている?
Q&A
● テストはアプリケーション層のメソッドに対して書く
(ちなみにspock)
● メリット:
○ 費用対効果が良い
○ 内部のリファクタがしやすい
○ アプリケーションサービス層で担保すれば、
呼び出し元がAPIだろうが画面だろうが watcherだろう
が安心感がある
● デメリット:
○ テストでのDB実行環境構築が必要
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
● テストはどうしている?
Q&A
● 要件として参照と更新を同時に行う必要がある場合は?
例:ある情報を参照したら参照ログを残したい
Q&A
● 要件として参照と更新を同時に行う必要がある場合は?
例:ある情報を参照したら参照ログを残したい
● 対策1:
ApplicationServiceを複数呼び出す処理を書く
ファサードのようなレイヤなど。
通常のApplicationServiceとは区別するのがよい
● 対策2:
ドメインイベントを発行してWatcherで拾い、非同期的に更新を行う
Q&A
● アプリケーションサービスはコマンド系・クエリ系でクラスを分ける?
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
Q&A
● アプリケーションサービスはコマンド系・クエリ系でクラスを分ける?
→ 分けたほうが使用するモジュールにに間違いないことが判別しやすい。
でもどちらも可
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
● QueryServiceはUIから直接参照させてもよいのでは?
Q&A
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Query Serivce
DTO
Query Serivce
Impl
● QueryServiceはUIから直接参照させてもよいのでは?
→どちらでも可、要件次第。
 今回はApplicationServiceを挟んでよかった。
○ テスト単位がApplicationServiceというレイヤで統一できる
○ 単純な条件抽出以外の処理を分岐したい場合、
その制御をApplicationServiceに任せられる
■ 操作ユーザーの情報に応じて
処理を分岐
■ 権限制御、抽出条件変更など
Q&A
Application
Service
Domain
Model
Query
Model
User
Interface
Infrastructure
<<interface>>
Query Serivce
DTO
Query Serivce
Impl
まとめ
まとめ
● CQRSは要件に応じて柔軟にやり方を変えられる
● Write/Readモデルを分けるときにORMを分けるのは、
モデルを分けるメリットを大きくできる
● ぜひご検討してみてください
● ご意見、ご質問は @little_hand_s もしくは#ccc_m4 まで
ありがとうございました

More Related Content

What's hot

ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外Takuya Sato
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかYusuke Suzuki
 

What's hot (20)

ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
 

Viewers also liked

Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugMasatoshi Tada
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てRyosuke Uchitate
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜aha_oretama
 
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017tty fky
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座Yusuke Suzuki
 
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性J-Stream Inc.
 
Javaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチJavaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチCData Software Japan
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017Carol Smith
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験樽八 仲川
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Kohei Saito
 
Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜Youtarou TAKAHASHI
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方CData Software Japan
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyTakakiyo Tanaka
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Takuya Okada
 
Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実J-Stream Inc.
 
JVM上で動くPython処理系実装のススメ
JVM上で動くPython処理系実装のススメJVM上で動くPython処理系実装のススメ
JVM上で動くPython処理系実装のススメYoshiaki Shibutani
 
サーバサイド Kotlin
サーバサイド Kotlinサーバサイド Kotlin
サーバサイド KotlinHiroki Ohtani
 
ゲームで切り込む暗黙知的なスキルやノウハウ
ゲームで切り込む暗黙知的なスキルやノウハウゲームで切り込む暗黙知的なスキルやノウハウ
ゲームで切り込む暗黙知的なスキルやノウハウhaji mizu
 

Viewers also liked (20)

Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立てユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
ユニットテストのアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
 
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座
 
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
CDNのトラフィックエンジニアリング:CDNの現状とSDNの可能性
 
Javaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチJavaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチ
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
 
Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere Liberty
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門
 
Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実
 
JVM上で動くPython処理系実装のススメ
JVM上で動くPython処理系実装のススメJVM上で動くPython処理系実装のススメ
JVM上で動くPython処理系実装のススメ
 
サーバサイド Kotlin
サーバサイド Kotlinサーバサイド Kotlin
サーバサイド Kotlin
 
ゲームで切り込む暗黙知的なスキルやノウハウ
ゲームで切り込む暗黙知的なスキルやノウハウゲームで切り込む暗黙知的なスキルやノウハウ
ゲームで切り込む暗黙知的なスキルやノウハウ
 

Similar to DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話

【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜Fumiyasu Sumiya
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介ao27
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだNarami Kiyokura
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Kazumi IWANAGA
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopTakashi Kambayashi
 
脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_QueryHidekazu Ishikawa
 
Skinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsSkinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsKazuhiro Sera
 
Cloud Formation Best Practice
Cloud Formation Best PracticeCloud Formation Best Practice
Cloud Formation Best Practiceyutamuramot
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...Google Cloud Platform - Japan
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたNarami Kiyokura
 
⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1Nishida Kansuke
 
MODXで“超”キレッキレのブログ作る秘訣公開します
MODXで“超”キレッキレのブログ作る秘訣公開しますMODXで“超”キレッキレのブログ作る秘訣公開します
MODXで“超”キレッキレのブログ作る秘訣公開しますKei Mikage
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Tomoharu ASAMI
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminarAtushi Sugiyama
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 

Similar to DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話 (20)

【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for Hadoop
 
脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query
 
Skinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsSkinny Controllers, Skinny Models
Skinny Controllers, Skinny Models
 
Cloud Formation Best Practice
Cloud Formation Best PracticeCloud Formation Best Practice
Cloud Formation Best Practice
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1
 
MODXで“超”キレッキレのブログ作る秘訣公開します
MODXで“超”キレッキレのブログ作る秘訣公開しますMODXで“超”キレッキレのブログ作る秘訣公開します
MODXで“超”キレッキレのブログ作る秘訣公開します
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 

More from Koichiro Matsuoka

ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]Koichiro Matsuoka
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Koichiro Matsuoka
 
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)Koichiro Matsuoka
 
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)Koichiro Matsuoka
 
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するKoichiro Matsuoka
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 Koichiro Matsuoka
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 

More from Koichiro Matsuoka (7)

ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
 
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
 
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
 
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消するベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 

DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話