テスト駆動開発から始めるドメイン駆動設計入門 ~ドメインサービス~

初めに

この記事は書籍『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』で解説されているドメイン駆動設計パターンをテスト駆動開発で実装したものです。

言語は Ruby です。Ruby でのテスト駆動開発の詳細に関してはこちらの記事をご参照ください。Gitpodからブラウザ開発環境が利用できるのでお手軽に開発を始めることが出来ます。

Read more
テスト駆動開発から始めるドメイン駆動設計入門 ~エンティティ~

初めに

この記事は書籍『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』で解説されているドメイン駆動設計パターンをテスト駆動開発で実装したものです。

言語は Ruby です。Ruby でのテスト駆動開発の詳細に関してはこちらの記事をご参照ください。Gitpodからブラウザ開発環境が利用できるのでお手軽に開発を始めることが出来ます。

Read more
テスト駆動開発から始めるドメイン駆動設計入門 ~値オブジェクト~

初めに

この記事は書籍『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』で解説されているドメイン駆動設計パターンをテスト駆動開発で実装したものです。

言語は Ruby です。Ruby でのテスト駆動開発の詳細に関してはこちらの記事をご参照ください。Gitpodからブラウザ開発環境が利用できるのでお手軽に開発を始めることが出来ます。

Read more
テスト駆動開発から始めるRuby入門 ~6時間でオブジェクト指向のエッセンスを体験する~

Open in Gitpod

初めに

この記事は テスト駆動開発から始める Ruby 入門 -2 時間で TDD とリファクタリングのエッセンスを体験する- の続編です。

前提として エピソード1を完了して、テスト駆動開発から始める Ruby 入門 -ソフトウェア開発の三種の神器を準備する- で開発環境を構築したところから始まります。 別途、セットアップ済み環境 を用意していますのでこちらからだとすぐに始めることが出来ます。

本記事は一応オブジェクト指向プログラム入門者向けとなっていますが、入門者の方は用語についてはわからなくても結構です、コードを繰り返し写経することで感覚を掴んでもらえば自ずと書いてあることはわかるようになってきますので。あと、概要はオブジェクト指向プログラム経験者に向けて書いたのものなので読み飛ばしてもらって結構です(ネタバレ内容です)、経験者の方からのツッコミお待ちしております。

概要

本記事では、 オブジェクト指向プログラム から オブジェクト指向設計 そして モジュール分割テスト駆動開発 を通じて実践していきます。

オブジェクト指向プログラム

エピソード 1 で作成したプログラムの追加仕様を テスト駆動開発 で実装します。 次に 手続き型コード との比較から オブジェクト指向プログラム を構成する カプセル化 ポリモフィズム 継承 という概念をコードベースの リファクタリング を通じて解説します。

具体的には フィールドのカプセル から setter の削除 を適用することにより カプセル化 を実現します。続いて、 ポリモーフィズムによる条件記述の置き換え から State/Strategy によるタイプコードの置き換え を適用することにより ポリモーフィズム の効果を体験します。そして、 スーパークラスの抽出 から メソッド名の変更 メソッドの移動 の適用を通して 継承 の使い方を体験します。さらに 値オブジェクトファーストクラス というオブジェクト指向プログラミングに必要なツールの使い方も学習します。

オブジェクト指向設計

次に設計の観点から 単一責任の原則 に違反している FizzBuzz クラスを デザインパターン の 1 つである Command パターン を使ったリファクタリングである メソッドオブジェクトによるメソッドの置き換え を適用してクラスの責務を分割します。オブジェクト指向設計のイデオムである デザインパターン として Command パターン 以外に Value Object パターン Factory Method パターン Strategy パターンリファクタリング を適用する過程ですでに実現していたことを説明します。そして、オープン・クローズドの原則 を満たすコードに リファクタリング されたことで既存のコードを変更することなく振る舞いを変更できるようになることを解説します。

加えて、正常系の設計を改善した後 アサーションの導入 例外によるエラーコードの置き換え といった例外系の リファクタリング を適用します。最後に ポリモーフィズム の応用として 特殊ケースの導入 の適用による Null Object パターン を使った オープン・クローズドの原則 に従った安全なコードの追加方法を解説します。

モジュールの分割

仕上げは、モノリシック なファイルから個別のクラスモジュールへの分割を ドメインオブジェクト の抽出を通して ドメインモデル へと整理することにより モジュール分割 を実現することを体験してもらいます。最後に 良いコード良い設計 について考えます。

Before

diag-c63943e73aed75ba31adf85779eaf481.png

After

diag-84a49e2f281dfc169055d0bfc4b4aeb6.png

Read more
テスト駆動開発から始めるRuby入門 ~アルゴリズムのパフォーマンスチューニングとベンチマークを実践する~

Open in Gitpod

初めに

この記事は テスト駆動開発から始める Ruby 入門 -2 時間で TDD とリファクタリングのエッセンスを体験する- の外伝エピソードです。ちなみに前半の元ネタは テスト駆動開発付録 B フィボナッチを Ruby で実装したものです。後半はオリジナルエピソードでは言及できなかったアルゴリズムの プロファイリングベンチマーク の実施に関して解説しています。

前提として、テスト駆動開発から始める Ruby 入門 -ソフトウェア開発の三種の神器を準備する- で開発環境を構築したところから始まります。別途、セットアップ済み環境 を用意していますのでこちらからだとすぐに始めることが出来ます。

前半の用語の詳細については エピソード 1 で解説しています。後半の用語の詳細については エピソード 3 で解説していますので興味があれば御一読ください。

Read more
テスト駆動開発から始めるRuby入門 ~ソフトウェア開発の三種の神器を準備する~Read more
テスト駆動開発から始めるRuby入門 ~2時間でTDDとリファクタリングのエッセンスを体験する~

初めに

この記事は一応、Ruby 入門者向けの記事ですが同時にテスト駆動開発入門者向けともなっています。

対象レベルによって以下のように読み進められれば効率が良いかと思います。

  • Ruby 入門者でプログラミング初心者・・・とりあえずコードの部分だけを写経しましょう。解説文は最初のうちは何言ってるかわからないと思うので 5 回ぐらい写経して Ruby を書く感覚がつかめてきてから読み直すといいでしょう。もっと知りたくなったら参考図書にあたってください。と言っても結構お高いので「リーダブルコード」と「かんたん Ruby(プログラミングの教科書)」といった初心者向け言語入門書から買い揃えるのがおすすめです。

  • Ruby 経験者でテスト駆動開発初心者・・・コード部分を写経しながら解説文を読み進めていきましょう。短いステップでテスト駆動のリズムが感覚がイメージしていただければ幸いです。もっと知りたくなったら原著の「テスト駆動開発」にあたってくださいオリジナルは Java ですが Ruby で実装してみると多くの学びがあると思います。あと、「プロを目指す人のための Ruby 入門」が対象読者に当たると思います。

  • 他の言語経験者でテスト駆動開発初心者・・・コード部分を自分が使っている言語に置き換えながら解説文を読み進めていきましょう。もっと知りたくなったら原著の「テスト駆動開発」にあたってくださいオリジナルは Java と Python が使われています。あと、「リファクタリング」は初版が Java で第2版が JavaScript で解説されています。

  • 言語もテスト駆動開発もつよつよな人・・・レビューお待ちしております(笑)。オブジェクト指向に関する言及が無いというツッコミですが追加仕様編でそのあたりの解説をする予定です。あと、「リファクタリング」には Ruby エディションもあるのですが日本語訳が絶版となっているので参考からは外しています。

写経するのに環境構築ができない・面倒なひとは こちら からお手軽に始めることができます。

Read more
環境構築から始めるテスト駆動開発 ~Ruby開発環境を構築する(WSL版)~

はじめに

これは 環境構築から始めるテスト駆動開発 ~ プログラミング環境の共通基盤を構築する ~ の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

Read more
環境構築から始めるテスト駆動開発 ~Ruby開発環境を構築する~

はじめに

これは 環境構築から始めるテスト駆動開発 ~ プログラミング環境の共通基盤を構築する ~ の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

Read more
環境構築から始めるテスト駆動開発 ~プログラミング環境の共通基盤を構築する~

はじめに

この記事はソフトウェア開発者を目指す入門者を対象に、IT リテラシの基本とプログラミング学習とソフトウェア開発の基盤となる環境構築の手順を解説しています。以下の構成の Windows マシンで作業を進めていきます。

os-version.png
Read more