DDD

goddd とは何か?

これは Go Advent Calendar 2017 その2 6日目の記事です。 https://qiita.com/advent-calendar/2017/go2みなさん、こんにちは。 pospome です。 普段は GAE/Go でサーバサイドの開発をしています。twitter では 実装パターン, DDD, golang, GCP についてつぶ…

golang のレイヤ構造において、他のコードに影響なくインフラレイヤのデータソース実装を差し替えることは可能か?

最近、golang のレイヤ構造において、他のコードに影響なくインフラレイヤのデータソース実装を差し替えることは可能か? という質問を受けた。回答時間が限られている中で質問を受けたので、 「現実的には難しい」という雑な回答しかできなかった。さすがに…

DDDにおいて、なぜ複数の集約にまたがってトランザクションをかけてはいけないのか(multiple aggregates in one transaction)

DDD

DDDでは 集約 = トランザクション境界 でなければならないので、 複数の集約をまたがるデータの永続化処理は結果整合性になる。なぜ集約をまたいでトランザクションをかけてはいけないのかというと、 集約で「データの一貫性の境界」を表現するため。 なので…

CQRSのコマンドで戻り値を取りたい場合はどうするのか(cqrs command return value)

----- 2016/10/23 追記 --------- コマンド操作が実行されると、 controller で アプリケーションサービスを呼び出す実装ではなく、 controller でコマンドを発行し、 bus で受信し、 saga で処理していくような実装を想定しています。詳しくは .NET本 を見…

DDDと高負荷サービス(というか I/Oアクセス)は相性が悪いのか?

DDD

DDDはActiveRecordパターンのように1つのモデルが1つのテーブルと紐づくとは限らない。具体例を出すと、 DBにUserテーブルがあるからといってUserモデルを作るとは限らない。ログインユーザーを表現するLoginUserモデルと ユーザーのプロフィールを表現するU…

DDD における不要な getter/setter を実装するべきではないという件についての挫折と感想

DDD

別にDDDにかぎらず、 不要な getter/setter を実装しない方がいいというのはその通りなんだけど、 DBに紐づくモデルの getter に関してはそれができないケースがある。利用するORMによって、DBに紐づくモデルに規約が定められている場合は無理。 例えば、ク…

DDDの仕様パターン

DDD

エリック・エヴァンスのDDD本では「仕様パターン」という実装パターンが説明されている。仕様上のバリデーションはエンティティや値オブジェクトに実装してはいけない。 複雑な仕様による複雑なバリデーションロジックは クラスの肥大化を招いてしまう。 cla…

DDDのコンテキストはDDDに関わらず、全ての開発に使えるのでは?

DDD

DDDの重要な概念の1つに「コンテキスト」がある。 これはDDDに関わらず、複雑なアプリケーション開発に利用できるのでは?個人的にコンテキストを利用することで「クラスの責務」をシチュエーションごとに定義しやすくなるというのが 面白い点だった。一般的…

DDDにおけるDBアクセス回数とドメインモデル表現のトレードオフについて

DDD

DDDでは「適切なドメインモデリング」が重要になってくる。このモデリングには明確な答えがなかったりするので、 自分が(チームが)適切だと思ったモデリングで進めていくと思うんだけど、 DBアクセスを伴う仕様では上手く表現できないケースが有る。具体的…

DDDにおいてリポジトリとDBのトランザクションは切り離せないのか?

DDD

DDDではリポジトリに対してDIPを利用し、インターフェースと実装を切り離す傾向にある。これはいわゆる「抽象に依存せよ」ってやつなので、 DDDというよりは既存のプログラミングテクニックになる。で、これを実現するためにリポジトリを以下のようにインタ…