yoskhdia’s diary

DDDとかプログラミングとかアーキテクチャとか雑多に

「データ」「情報」「知識」の含意からドメイン駆動設計と2種のインピーダンス・ミスマッチを辿る考察

FOLIO Advent Calendar 2020 17日目です。

「データ」「情報」「知識」の含意から、ドメイン駆動設計、そして、ソフトウェア設計の現実に存在するインピーダンスミスマッチまでを考えてみるエントリです。 本エントリは、主に次の論文「データ・情報・知識の含意と相互関係の二重性について」(関口 (2016))を多々援用します*1。 これは、情報経営学分野の知見をソフトウェア設計に持ち込む試みです。

*1:紀要論文ではありますが、著者は情報経営学分野での活躍があり十分参考になるものと思います

続きを読む

EventStorming and Narrative

f:id:yoskhdia:20181225103320j:plain:w400

Okuda on Twitter: "Chatworkさんのトコロでちょっと喋ってきました。口頭メインのためスライドは薄いです🌷 Event Storming and Narrative https://t.co/dI6KJzgX1q"

ということで、スライドがあまりにも薄いため補足を残しておくエントリです。

speakerdeck.com

続きを読む

Scalaを例に「仕様」パターンを実装する

この記事はFOLIO Advent Calendar 2018の6日目です。

FOLIOでも使っている「仕様」パターンをScalaで実装する方法について紹介します。

「仕様」パターンとは

Eric Evans氏とMartin Fowler氏による仕様パターンに関する論文があります。 https://martinfowler.com/apsupp/spec.pdf ※PDFです

また、DDD本では次のように紹介されています。

特殊な目的を持った述語的な値オブジェクトを明示的に作成すること。仕様とは、あるオブジェクトが何らかの基準を満たしているかどうかを判定する述語である。

(中略)

  1. オブジェクトを検証して、何らかの要求を満たしているか、何らかの目的のための用意ができているかを調べる。
  2. コレクションからオブジェクトを選択する(期限が超過した請求書を問い合わせる場合など)。
  3. 何かの要求に適合する新しいオブジェクトの生成を定義する。

検証、選択、要求に応じた構築という、これら3つの用途は、概念レベルでは同じものである。

− エリック・エヴァンスのドメイン駆動設計 p.228-229

今回は1点目のバリデーションに使うケースで考えます。

続きを読む

エンティティの同一性を表現するためにequalsをオーバーライドすべきか否か

このエントリは ドメイン駆動設計 #1 Advent Calendar 2018 の5日目です。
4日目は @s_edward さんの「Microservices と DDD」でした。
6日目は @kawakawa さんの ドメインオブジェクトとユースケースの関係について です。

TL;DR

エンティティの同一性を表現するためにequalsをオーバーライドすべき ではない と考えています。

稀によくあるサンプル

次のような実装を目にすることがあります。以降のコードは Scala 2.12.7 で動作確認しています。

※私が書きやすいのでScalaを用いていますが、他言語においても同様のことは言えるかと思います。

trait Identifier

trait Entity[ID <: Identifier] {
  def identifier: ID

  def canEqual(that: Any): Boolean = this.getClass == that.getClass

  override final def equals(that: Any): Boolean = {
    that match {
      case that: Entity[_] => canEqual(that) && identifier == that.identifier
      case _ => false
    }
  }

  override final def hashCode(): Int = identifier.hashCode()
}

equalsをオーバーライドすることで、エンティティが同じであるかをIdentifierを使って判定できるようになっています。 しかし、この実装は果たして良いのかどうかを考えてみるエントリです。

続きを読む

新しいモデリング手法: EventStorming (イベントストーミング) をはじめるための準備

EventStorming (イベントストーミング) というモデリング手法があります。

www.eventstorming.com

EventStorming is a flexible workshop format for collaborative exploration of complex business domains.

EventStormingは、複雑なビジネスドメインを協同的に探求するための柔軟なワークショップ形式のひとつです。(意訳)

考案者はAlberto Brandolini氏で2013年にはブログに最初の投稿がされています。 海外での認知度は高く*1、Eric Evans氏のプレゼンテーションの中でも強力な手法であると言及*2されています。

近々、この手法を試せる機会が来そうなので、そのやり方について(私見を交えつつ)まとめてみるエントリです。

続きを読む

「Don't build framework, Build platform」というテーマでエムスリーさんのTech Talkに参加してきました

ScalaMatsuri 2018で @jooohn1234 さんから、エムスリーさんで行われているTech Talkにご招待いただいたので発表してきました。 なんと、今回で第92回(!)

m3dev.github.io

発表資料

docs.google.com

今回もトークスクリプトを付けて発表資料を公開します。

エムスリーさんは定期的に社内技術発表会を開催しており、社外の人でもカジュアルに参加できる運営をしておられます。 興味のある方はコンタクトをとってみてはいかがでしょう?