猫でもわかるWeb開発・プログラミング猫でもわかるWeb開発・プログラミング本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。【DDDとコーディングの勉強1】twitter的なサービスを想像しながら考えるDDD2018-10-15【DDDとコーディングの勉強1】twitter的なサービスを想像しながら考えるDDDプログラミング・開発なにこれDDDって何?ここまでのまとめしかしじゃあどうするの層に分けるUI層ドメイン層インフラ層ここまでのまとめ次回なにこれDDDなにそれわからん。難しいんでしょ?という人向けのちょうシンプルDDD勉強会です。Development)の略です。なにそれわからん、と思うでしょう。DDDの考え方を簡単に説明します。「ドメイン」という言葉を考えてみましょう。日本語だと「領域」という単語にあたります。「ドメイン駆動設計」とは、自分の作るサービスという領域の中の事をよく知り、その知識に基づいて設計島用ということです。twitterというサービスを作る事を考えましょう。必要があるということです。twitterには「ユーザー」と「ツイート」がある「ユーザー」はどういうものなのかユーザーネームがあるプロフィールがあるいくつかの「ツイート」を持っている...「ユーザー」は何ができるのか他のユーザーをフォローツイートをするプロフィールを変更する...「ツイート」とはどういうものなのか本文がある一つの「ツイート」は一人の「ユーザー」に紐付けられるこういった、自分のサービスの領域についてよく知り、その上でコードを設計するのが大切ということです。ここからこういうコードができたとします。$newProfile);}こういう設計はそもそもtwitterというサービスを知らないとできませんし、この設計が本当に良いかどうかはtwitterというサービスを本当にしらないとわからないということです。ここまでのまとめtwitterというサービスを作るには、twitterというサービスについて(twitterというサービスの「ドメイン」について)よく知らないといけない。twitterというサービスの仕様をそんなに簡単に把握できたら苦労しませんしサービスの仕様を把握できたからといってそれを完璧にコードに落とし込めるかといったら疑問がわきますさらにはサービスに仕様変更が入る可能性もありますじゃあどうするのなんか一般的にこうすると仕様変更に強くなきがするよ、という知見が紹介されているのでそれに従います。層に分けるアプリケーションを層に分けます。レイヤードアーキテクチャとか言われます。下の記事なんかがきれいにまとめられていますが、正直これをみても「ナンノコッチャ」という人も多いかもしれません。qiita.comとりあえずわからなければこんな感じの層に分けると良いかと思います。UI層ドメイン層インフラ層もちろん、もっと理解できるようになってきたら「ここの層を細かく分けたり」とかしてもいいと思いますが、まずはイメージしやすいものから考えていきます。それぞれの層について簡単に説明します。見た目や画面の動きに関するコードの層ですユーザープロフィール画面にユーザーのアイコンと名前とプロフィール本文、最近のツイート20件を乗せるAPIのレスポンスをどういう構造で返すか、なんてこともUI層の役割になります。「ユーザーはどういうことができるのか」なんかを定義している部分です。「ツイート」はツイートのUserIdの下1桁によってDBが別れているので、どのDBを探せば目的のツイートが探せるのか、という処理データベースに接続するユーザー名やパスワードを取得して実際にデータベースに接続する処理こういった処理は「twitterというサービスの仕様の核となる部分」とは違います。twitterというサービス(にかかわらず我々が作るサービス)は複雑です。twitterに登録した「ユーザー」はどんなことができますか?すごいいろんなことができます。ユーザーはどういうことができるのか、それはドメイン層に定義します。ドメイン層を見るだけでtwitterがどのようなものなのか、わかるようにします。twitterがどのようなものなのか、それを知るために、DBがMaster-Slaveになっているかどうかは関係ないのです。DBがMaster-Slaveになっている場合、Masterは更新系、Slaveは参照系のクエリが走りますが、それはtwitterというサービス独自のものではありません。ドメイン層を見るだけでtwitterがどのようなものなのか、わかるようにするために、こういった処理は「インフラ層」に閉じ込めるのです。ここまでのまとめサービスは層に分かれる。ドメイン層にはサービスの仕様を書く。次回は「依存性の逆転」と、もし余裕があったらDI(依存性の注入)について書きます。スポンサーをお願いしますブログを投稿したらX(twitter)でお知らせしています。