ドメイン駆動設計に関するmasuda220のブックマーク (163)

  • ソフトウェア開発のやり方の改善

    5. 改善の三つの着眼点 開発者が主体的に ➢ 全体像の認識合わせ ➢ つながりを確かめ整える ➢ 軸を強化し、周辺を広げる コードに責任を持つ ・全体に興味を持つ ・俯瞰図を眺めて、方向と関係を確認する習慣 ・俯瞰図を自分で描いて説明する練習 ・つながりに興味を持つ ・つながりを確認する習慣 ・不要なつながりを取り除く習慣 ・軸を中心に考える習慣 ・広げるまえに軸を強化する習慣 ・広げたら、さらに軸を補強する習慣 この三つに取り組むと、見通しのよい、構造が安定し、変更が楽で安全なソフトウェアを生み出せる CCSR手法は、この改善活動を現場に導入し実践するための手引きとヒント 2020/7/30 5

    ソフトウェア開発のやり方の改善
  • RDRAのダイアグラムの位置付け - 日々常々

    RDRA をやってて思うところ。 RDRAでは多くのダイアグラムが定義されていますが、これらのダイアグラムはきっと成果物(最終的に作るものの中核にあるものをこう呼んでみる)では無いです。多分ハマりどころ。 システムコンテキスト図も業務フロー図もユースケース複合図も、どれもRDRAのエディタとビューアでしかありません。中間成果物、もしくは補足資料的な位置付け。 じゃあ成果物が何かって言うと、各アイコンと関連線。詰まるところ全てのアイコンと関連線を持ったリポジトリそのものが成果物なんだと思います。 ダイアグラムを通してリポジトリを読み書きしている感覚。アイコンを見つけやすい、関連線を引きやすいダイアグラムを使ってアイコンを配置し、アイコン間に関連線を引く。その整合性を確認しやすいダイアグラムを使って、アイコンと関連線を検証する。各ダイアグラムはそのためのものでしか無い。 決して「ダイアグラムを

    RDRAのダイアグラムの位置付け - 日々常々
  • 【翻訳】技術的負債という概念の生みの親 Ward Cunningham 自身による説明 - t-wadaのブログ

    システム開発の世界において「技術的負債Technical Debt)」は繰り返し話題になり、しばしば炎上しています。 技術的負債という概念の生みの親は Ward Cunningham (ウォード・カニンガム)です。彼は 1992 年にオブジェクト指向プログラミングの国際カンファレンス OOPSLA '92 の Experience Report でコードの初回リリースを負債に例えました("Shipping first time code is like going into debt")。 Ward Cunningham はソフトウェアの世界に多くの貢献を果たしてきました。Wiki の発明者であり、XP と TDD の父 Kent Beck の師匠のような存在であり、建築の世界の「パタン・ランゲージ」を Kent Beck と共にソフトウェアに輸入した人であり、「アジャイルソフトウェア開

    【翻訳】技術的負債という概念の生みの親 Ward Cunningham 自身による説明 - t-wadaのブログ
    masuda220
    masuda220 2020/06/23
    "ソフトウェアに現時点での理解を可能な限り反映させることが重要です。" "問題を理解するに従ってリファクタリングしていけるような、十分にきれいなコードを書いているかどうかで決まる"
  • ドメイン駆動設計に15年取り組んでわかったこと 「ビジネスルール・値オブジェクト・型」が3つのキーワード

    株式会社ビープラウドが主催するIT勉強会「BPStudy」。#151となる今回は、設計の代表格であるオブジェクト指向、モデリング、そして設計にフォーカスをあて、LT大会を開催しました。「ドメイン駆動設計に取り組んだ15年でわかったこと 」に登壇したのは、ドメイン駆動設計に15年取り組み続けている増田亨氏。ビジネスルールと値オブジェクトと型という3つのキーワードを軸に、ドメイン駆動設計をソフトウェア開発に落とし込む方法論について語りました。講演資料はこちら ビジネス活動に起因する複雑さに立ち向かうドメイン駆動設計 増田亨氏(以下、増田):よろしくお願いします。私は2006年ぐらいからドメイン駆動設計に実際に取り組んで、15年ぐらいやっているんですけど、今日はそれを私なりにわかったことというか、けっこう最近振り切ってこうやってますよという内容を、みなさんの参考になればと思って少しお話しします。

    ドメイン駆動設計に15年取り組んでわかったこと 「ビジネスルール・値オブジェクト・型」が3つのキーワード
    masuda220
    masuda220 2020/06/11
    BPStudyの勉強会でしゃべった内容を記事にしてもらった。しゃべった言葉がそのままなので、だいぶ冗長だけど、雰囲気は伝わりやすいかも。
  • よりよい開発手法 - ソフトウェア設計を考える

    ソフトウェア開発の問題点 従来のウォータフォール方式で、フェーズ分けと分業を重視し、手続き的なモジュール構造でソフトウェアを開発するやり方には次の問題があります。 大量のドキュメントの作成に膨大な時間と費用がかかる(工程が多く、必要な人員がふくらむ) フェーズ分けと分業のため、関係者の間の認識合わせが難しい(伝言ゲーム) ちょっとした変更でも、調査・修正・確認に膨大な時間がかかる(変更がやっかいで危険) 一方、アジャイルと呼ばれる開発のやり方は、以下の問題が起きがちです。 ソフトウェアの規模が大きくなると、どこになにが書いてあるか理解ができなくなる 増築・改築の繰り返しが、全体の構造と品質を劣化させる 全体を俯瞰したり構造を確認するための情報がなく、変更の影響がわかりにくい ちょっとした変更でも、調査・修正・確認に膨大な時間がかかる(変更がやっかいで危険) どちらのやり方でも 変更がやっか

    よりよい開発手法 - ソフトウェア設計を考える
    masuda220
    masuda220 2020/06/03
    ソフトウェア仕様の記述にプログラミン言語を使い、ツールを使って図や一覧で可視化する。そうすることで、要件定義・仕様化・実装の継ぎ目をなくすモダンでアジャイルな開発手法への取り組み。
  • ビジネスロジックのモデリングと実装 - ソフトウェア設計を考える

    ビジネスロジック(ドメインロジック)をどうやってモデリングして、どうやって実装するかの実践例を公開しました。 RDRA 2.0 ハンドブックの図書館システムの実装例 (github) ビジネスロジックのもとになる業務モデルやビジネスルールのモデリングは、 モデルベースの要件定義手法 RDRA2.0 を使っています。 RDRA 2.0 ハンドブック (Kindle Unlimited会員は無償です) 実装技術は、Java/Spring Boot/MyBatis/Thymeleafを使っています。 JIGという設計の可視化ツールを使って、ソースコードからパッケージ関連図やクラスの一覧を自動生成しています。 JIGリポジトリ 利用方法 RDRA 2.0 ハンドブックを入手 リポジトリRDRA 2.0 ハンドブックの図書館システムの実装例をクローン Gradleタスク bootRunを実行(アプリ

    ビジネスロジックのモデリングと実装 - ソフトウェア設計を考える
    masuda220
    masuda220 2020/06/01
    ビジネスルールの分析と可視化にモデルベースの要件定義手法 RDRA 2.0を使い、Javaを使ってそのままドメインロジックとして表現した実践例です。
  • ソフトウェアのもっとも重要な品質は発展性 - ソフトウェア設計を考える

    ソフトウェアでもっとも重視すべき品質は「発展性」なんだと思う。 機能要求や非機能要求は、時間とともに変化する。その要求の変化に対応してソフトウェアを発展させていける能力、つまり発展性こそがソフトウェアの価値を大きく左右する。 発展性に問題があり変化ができないソフトウェアと、発展性に優れ変化と成長を続けやすいソフトウェアの価値の差ということだ。 発展性の価値 顧客のニーズは変化する。また、市場の競合関係も変化する。そういう事業環境の変化にあわせて、ソフトウェアにも変化を続ける能力が求められている。 また、顧客のニーズや市場環境の変化がゆるやかだとしても、事業活動をすれば組織は経験を通じて学び成長していく。開発チームに限っても、ソフトウェア開発運用の経験を積むことで、開発の考え方とやり方にさまざまな学びと成長がある。そうやって学んだ知識を適切にかつ迅速にソフトウェアに反映できるほど、事業により

    ソフトウェアのもっとも重要な品質は発展性 - ソフトウェア設計を考える
    masuda220
    masuda220 2020/04/07
    要件定義・仕様化・実装の継ぎ目をなくす/ビジネスルールに焦点を合わせる/型によるモジュール構造に移行する
  • ドメイン駆動設計に15年取り組んでわかったこと

    Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)

    ドメイン駆動設計に15年取り組んでわかったこと
  • ドメイン駆動設計に関する何か - 日々常々

    2020-03-13追記: 「ドメイン駆動設計」のハードルを上げる意図はありません。そもそもそんな特殊技能でもないと思っています。「ドメイン駆動設計が合っているか」を測る材料になるかも?くらいの気持ちで読んでいただけると幸いです。 何度目か知りませんがDDDがまたブームを迎えているようで。DDD難民と言う言葉が出た頃を思うと感慨深いですね。実際難民になったわけではないので肌感覚で知らないのが残念なところですが、これはどうでもいい。 DDD、日語ではドメイン駆動設計となりますが、DDDを冠していてもドメインが語られることは少ないようです。 数ある書籍もドメインモデリングの話ではなく、ドメインモデルをいかに実装に落とし込むかにフォーカスしていると感じています。 これはこれで仕方ないと言うか、ドメインの話って広く語れないんですよね。 ドメインは領域で境界があって範囲が限定されています。特定ドメ

    ドメイン駆動設計に関する何か - 日々常々
  • オブジェクト指向プログラミングの現在・過去・未来

    2. 自己紹介 2019/11/23 2 増田 亨 (@masuda220) 最近の仕事JavaSQLでプログラミング(したい) 今日は、このの背景にある オブジェクト指向プログラミングの 基的な考え方を説明します 仕事レベルで使った言語 Z80アセンブラ, C, PL/SQL, C++, COBOL, FORTRAN, BASIC, Lisp, Prolog, Smalltalk, awk, Perl, PHP, Ruby, Python, Groovy, Objective-C, JavaScript … 試したことのある言語 Haskell, OCaml, Schema, Scala, Kotlin, Go, Rust, IO, TypeScript, … 面白いと思っている言語 Haskell, Prolog, Rust

    オブジェクト指向プログラミングの現在・過去・未来
    masuda220
    masuda220 2020/02/16
    オブジェクト指向プログラミングとは型を意識するプログラミング
  • BIGLOBEという、自分にぴったりの会社で楽しく働いている話 - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」

    こんにちは、サービス開発部のこばやし(eri-twin)です。 BIGLOBEで働いて5年目のサーバサイドエンジニアです。 私は「やりたい仕事で楽しく成果を出す」をモットーに日々働いています。 そしてこの働き方を実現するために、会社の文化や制度にたくさんお世話になっています。 今回はそんな私が会社で関わっているさまざまな活動を通して、BIGLOBEのエンジニア文化を紹介したいと思います! BIGLOBEでは、成長の機会がたくさんある! 勉強できる環境がある! BIGLOBEは、エンジニアの勉強を奨励してくれる会社です。 ↑このスペースの棚いっぱいに技術書が並んでいます! 技術書棚があり、ここのは会社のお金で購入してもらったものです。 購入タイトルの申請も簡単で、技術書の購入には上司も非常に理解があるため承認もスムーズです。 業務時間内にも定時後にも、ここに並ぶ技術書を眺めたり読んで

    BIGLOBEという、自分にぴったりの会社で楽しく働いている話 - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」
    masuda220
    masuda220 2020/02/06
    会社として7年間ドメイン駆動設計に取り組むBIGLOBEのお話し。 新卒で入社して5年目の社員が感じている、エンジニアの成長の場としてのBIGLOBEの魅力。
  • 「現場で役立つシステム設計の原則」を読んで - 技術とかボドゲとかそんな話をしたい

    はじめに 先日、増田亨さんの「現場で役立つシステム設計の原則」を読んだので感想を。 しばらく前に買っていたのですが、年末で余裕があったのでやっと読了しました。 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法 作者:増田 亨出版社/メーカー: 技術評論社発売日: 2017/07/05メディア: 単行(ソフトカバー) 現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法 作者:増田 亨出版社/メーカー: 技術評論社発売日: 2017/07/05メディア: Kindle版 現場で役立つシステム設計の原則 概要 全10章で構成されていて、総じてDDDやオブジェクト指向メインの話になっています。 なぜそうするのかという理由とサンプルコードと一緒に説明がなされていて、イメージがわきやすくなっています。 感想 1番の感想は、「新卒1年目で読

    「現場で役立つシステム設計の原則」を読んで - 技術とかボドゲとかそんな話をしたい
    masuda220
    masuda220 2020/01/13
    伝えたかったことが伝わったようで、うれしい。
  • 【DDD練習】「JR 新幹線 料金ルールを実装してみよう」にチャレンジ(その1) - shimapapa.io

    前置き 『現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法』の著者の増田さんが、 ワークショップで使用する「JR 新幹線 料金ルールを実装してみよう」というサンプルコードをGitHubで公開されておりました。 現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法 作者:増田 亨出版社/メーカー: 技術評論社発売日: 2017/07/05メディア: Kindle版 明日 12/14 の「現場でDDD ! 2nd」のワークショップで使う、サンプルコードです。 新幹線の運賃と特急料金の計算ルールを、値オブジェクトで表現してみよう、という内容。 イベントに参加されない方も、ぜひ、チャレンジしてみてください。https://t.co/LlLKA5h7Bt #genbadeDDD— 増田 亨. (@masuda220) 2019年12月13日

    【DDD練習】「JR 新幹線 料金ルールを実装してみよう」にチャレンジ(その1) - shimapapa.io
    masuda220
    masuda220 2020/01/09
    どんどんチャレンジして、こうやって公開してもらえると、嬉しいですね。
  • 現場で役立つシステム設計の原則メモ - Qiita

    This article is a Private article. Only a writer and users who know the URL can access it. Please change open range to public in publish setting if you want to share this article with other users. ※この記事は著者の増田さんの了解の上で限定公開させて頂いております。 https://twitter.com/masuda220/status/1215122054795522049?s=20 オブジェクト指向、設計がなぜ必要か = ソフトウェア全体の整理整頓をするため 第1章 小さくまとめてわかりやすくする 変更が大変なプログラムの特徴 メソッドが長い クラスが大きい 引数が多い 関心事を詰め込みすぎ

    現場で役立つシステム設計の原則メモ - Qiita
    masuda220
    masuda220 2020/01/09
    熱心に読んで、手を動かして自分の知識にしてもらっているなあ。 著者としては、こういうのは嬉しいですね。 この本をまだ知らない人に、この本を知ってもらう機会にもなるし。
  • ドメイン駆動設計の比類なきパワーでRailsレガシーコードなど大爆殺したるわあああ!!! - Qiita

    この記事は クラウドワークスアドベントカレンダー2019 12日目の記事です。 概要 こんにちは、怒り駆動リファクタリングを生業としている @MinoDriven です。 弊社リファクタリング専門チーム「バグハンター」で現在実施中のリファクタリング設計について紹介致します。 ドメイン駆動設計 を用い、Railsレガシーコードに対しViewとControllerを ActiveRecord非依存 に変更する設計です。 状況 弊社ブログの過去エントリにあるように、弊社サービスcrowdworks.jpはサービスインから8年経過し、 30万行 を超えるモノリシックRailsアプリになっています。 開発生産性が低下してきています 。 生産性低下の課題を解決しようにも、大規模な上に複雑かつ密結合な構造になっており、 マイクロサービスへの移行も、リプレイスも困難な制約 があります。 そこで半年前にリフ

    ドメイン駆動設計の比類なきパワーでRailsレガシーコードなど大爆殺したるわあああ!!! - Qiita
  • 「現場で役立つシステム設計の原則」と「レガシーコードからの脱却」を読んでUnity開発のテスト自動化への危機感UP - kidoOooOoooOOom

    「現場で役立つシステム設計の原則」を読み終わって、今は「レガシーコードからの脱却」を読んでいる途中。 先日のEOF2019であったt_wadaさんの「質とスピード」、ryuzeeさんの「レガシーコードからの脱却」の資料も合わせて読むと理解が深まってくる。 speakerdeck.com slide.meguro.ryuzee.com 内部品質であるソフトウェアの保守性を高めること t_wadaさんの「質とスピード」スライドより t_wadaさんの「質とスピード」スライドより 最初から作るべきものが正しく予測できて、それを一発番の開発フローで正しく作ることが「幻想であること」がもう分かってきたので、最近はアジャイル開発がキャズムを超えてきている。 当てになりにくい「予測」よりも「対応」(=変更容易性=適応性)を高めるプラクティスが重要になってきていて、テスト自動化やドメイン駆動、モブプロな

    「現場で役立つシステム設計の原則」と「レガシーコードからの脱却」を読んでUnity開発のテスト自動化への危機感UP - kidoOooOoooOOom
  • ドメインモデルとは(「現場で役立つシステム設計の原則」より) - Qiita

    業務で扱う(最小)単位でデータとロジックをひとまとめにして整理する技法 ドメインモデルが実現する世界 どこに何のロジックが書いてあるか、(ソースを見るだけで)わかる 改修しやすいプログラム ドメインモデルで解決したい問題 どこに何のロジックが書いてあるかわからない問題 - わからないから適当に書く→適当に書くからわからない → わからないから・・・ - ある修正をしようと思っても、どこまでが影響範囲かわからない - 使用している箇所全grepして調査 - 同じような処理、分岐が重複してしまう これを解決したい。これだけを考える。 なぜ(今までのシステムは)改修は難しいのか 機能クラスと、データクラスをわけてしまうから そのデータクラスを呼べる箇所 = 業務ロジックがかけてしまう どこになにが書いてあるかわからなくなる 共通クラス、Utilクラスを作ってしまうから 誰でも呼べる = そのクラ

    ドメインモデルとは(「現場で役立つシステム設計の原則」より) - Qiita
    masuda220
    masuda220 2019/11/05
    こういうのうれしいなあ。書いたかいがある。要点がわかりやすくコンパクトにまとまっている。「現場で役立つシステム設計の原則 を読んで、その内容をチームに伝えるようにまとめたメモです」
  • 設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する - Qiita

    /// <summary>契約金額</summary> public class ContractAmount { public int AmountIncludingTax; public decimal SalesTaxRate; } 当然データの入れ物(以後データクラスと呼称)だけでなく、税込み金額を計算するロジックが必要です。ここであまり設計を考えないと、この手の演算ロジックはデータクラスとは別のクラスに実装されることが多いです。以下のようにControllerに実装されることが多いのではないでしょうか。 /// <summary>契約コントローラー</summary> public class ContractController { private ContractAmount _contractAmount; /// <summary>税込金額を計算する。</summary>

    設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する - Qiita
    masuda220
    masuda220 2019/11/05
    設計の基本をひとつずつ踏み固め、一歩ずつ極めていく
  • Dart/Flutterでドメイン駆動設計(DDD)してみた - 導入編 - のんびり精進

    カテゴリ別にメモを管理できるアプリの開発を DDD(Domain-driven design)でやってみたものです。 github.com 二つの記事から成り、この記事はその一つ目です。 導入編(記事) 解決しようとした問題点や、DDD と関連用語の意味の他、モデリング・レイヤ分け・ディレクトリ構成の検討において考えたことなどをまとめています。 実装編 Dart/Flutter での実装を中心としますが、一つ目で触れていない点(集約など)の説明も含みます。 やってみようと思った経緯 何かを作るとき、設計がメチャクチャであっても運良くそれっぽく出来上がることがあります。 小さなものなら直しやすかったり、あるいは問題があまり顕在化しなかったりするかもしれません。 しかし、大きなものでは次第に破綻してしまうことが容易に想像できます。 Flutter でも、小さなアプリを作って学ぶ間は「なんて簡

    Dart/Flutterでドメイン駆動設計(DDD)してみた - 導入編 - のんびり精進
    masuda220
    masuda220 2019/11/03
    ドメイン駆動設計について初心者が学び始めた時に参考にした書籍やリンクがいろいろ書かれている。
  • 関心の分離を意識した名前設計で巨大クラスを爆殺する - Qiita

    大量のメソッドを保有し、数千、数万行単位にぶくぶく膨れ上がった巨大クラス。別名「神クラス」とも「大きな泥団子」とも呼ばれる、長大で複雑で、様々なクラスと密結合で極めて変更が困難なアイツ。 そんな巨大クラスの退治に有効な、命名に関する考え方を紹介致します。 解決したい課題、狙う効果 数千、数万行単位の巨大クラスの登場を抑止する。 巨大クラスを爆砕し、小さなクラス群に分割する。 クラス結合度を下げ、影響範囲を小さくすることで保守コストや変更コストを下げる。 ダメな例 例えばECサイトの「商品」を考えてみます。 よくありがちなのは、商品をそのまま「商品クラス」と設計してしまうこと。 単純な商品クラスは、往々にして出品、予約、注文、発送など、様々なユースケースのクラスと結合してしまいがちです。 商品クラス自体も、結合したクラスに関連する知識(ロジック)を持ち始め、どんどん巨大化複雑化していきます。

    関心の分離を意識した名前設計で巨大クラスを爆殺する - Qiita
    masuda220
    masuda220 2019/10/22
    「名前を設計する」という表現がよいなあ。こうやって具体的で意味が明確なクラス名を見つけるのが、クラス設計のコツなんだよなあ。