ScalaでDDD徹底入門講座

プログラミング#Scala#DDD
reoring
reoring
2015年10月13日 投稿
image.png (157.1 kB)

クラフトマンソフトウェアでは、最近話題のScalaとDDDを使った徹底入門講座を開こうと考えています。
講師は、書籍「実践ドメイン駆動設計」の翻訳レビュアとして参加した、この記事を書いている私と、野澤の二名です。

本講座のカリキュラムはまだ確定していないので、もし意見がありましたらガンガン言ってもらえるとありがたいです!

もし参加したいという!という方がいらっしゃいましたら、記事下部のコメント欄やメールにてご連絡いただけると非常に助かります。

以下、講座の内容です。

目的

このScalaでDDD徹底入門講座の目的は、「ソフトウェア開発の第一線で活躍するためのスキルを身につける」ことにあります。

単にScalaでの記述方法を覚えるだけではなく、

  • 自分でソフトウェアの設計を考えるための設計方法概論(UML, オブジェクト指向)
  • 設計を効率的に作るための Astah UML の操作法
  • 変更に強いプログラムを記述するための考え方と具体的な手法
  • 汎用性の高いプログラムの基本構造

などについて学びます。

例えばScalaでプログラミングするには、Scalaの開発環境を適切に設定する必要があります。この様な基本的なことも1から教えます。

こういったことは他の講座ではあまり教えることがなく、独自の強みだと思っています。

できるようになること

  • 大規模なソフトウェアでも保守性を損わずに構築できるようになる
  • 取り扱いやすい粒度のモジュールを複数のチームで開発できるようになる
  • 本当に再利用が可能なソフトウェアが構築できる

授業について

教材となるサンプルコードはGitHubにて公開します。

授業のスタイルとしては、講師がスライドで説明をして終わりではなく、皆様と一緒に1ステップずつ理解していくスタイルを基本としています。
講師は2名体制ですので、ついていけない方がいた場合はもう1ひとりの講師がヘルプします。

授業内容

Scala入門

例えば、正しいソフトウェアの設計をできるようになりたい場合、そのプログラミング言語の基礎について学ぶことなく設計の作り方だけを学ぶということは考えられません。
本講座では、設計の仕方の前にまずScalaの基礎について教えます。
Scalaの基礎ができるようになると、簡単な処理が記述できるようになります。

オブジェクト指向の基礎

オブジェクト指向の基礎では、クラス、カプセル化、継承、ポリモフィズムなどのオブジェクト指向に頻出する用語と意味を教えます。
オブジェクト指向以前の考えかたと、オブジェクト指向がなぜソフトウェア開発で頻繁に利用されるようになったかといった背景も1から丁寧に説明します。

UMLの基礎

オブジェクト指向で考えた内容を、言葉を話すように伝えられるようにしたのがUMLです。
UMLの基礎コースでは、UMLを使ってオブジェクト指向設計のモデリングができるようになります。

DDDの基礎

DDDはDomain Driven Designの略です。日本語にするとドメイン駆動設計となります。
ドメイン駆動設計とは、ソフトウェアが実現せんとする問題領域、つまりドメインを中心に据えて、そのドメインで設計や開発が駆動されるという意味です。
DDDの基礎では、ドメインにはどのような事柄がドメインになるのかといった基礎的なことから、ドメインを使った顧客とのコミュニケーションの方法など実際の業務に必要になる知識も教えます。

DDDでの実装方法

DDDで考えたドメインや設計をどうやって実装するかという方法をの基礎となる考えかたを1からしっかりと伝授します。

授業内容目次

オブジェクト指向の基本
	オブジェクト指向とは?
	用語
		クラス
		メソッド
		継承
		コンポジション
		ポリモーフィズム
	依存関係逆転の法則
	リスコフの置換原則
UMLの基礎
	クラス図の読み書き
	シーケンス図
Scala入門
	基本構文
		式指向
		制御構造
			if
			for
			while
			switch
			match
		変数
			varとvalの違い
	不変性
	パターンマッチング
		apply/unapply
	オプション
	パッケージ
	パッケージオブジェクト
	クラス
	ケースクラス
	オブジェクト
	コンパニオンオブジェクト
	関数
DDDの基礎
	ドメインモデルとはなにか?
	ユビキタス言語
	戦略デザイン
		コアドメイン
		サブドメイン
		コンテキストマップ
	戦術デザイン
		クラス設計
DDDでの実装
	ヘキサゴナルアーキテクチャ
	バウンデッドコンテキスト
		コアドメイン
		サブドメイン
		物理的なチーム編成
	バウンデッドコンテキストの連携
		メッセージング
		RESTfulリソース
	イベントソーシング
		ステートソーシングとの違い
	ドメインイベント
	CQRS
	エンティティ・値オブジェクト
    不変表明
	集約
	レポジトリ
	アプリケーション
		トランザクション境界
		アプリケーションサービス