masuda220のブックマーク (218)

  • 【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
  • オブジェクト指向プログラミング入門 -- Java object-oriented programming primer

    Javaで学ぶ、オブジェクト指向プログラミングの基礎知識。型とカプセル化が腹落ちすると、びっくりするくらいオブジェクト指向プログラミングがわかようになる/できるようになるRead less

    オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
    masuda220
    masuda220 2019/11/24
     オブジェクト指向プログラミングのスキルはクラス設計のスキル。クラス設計の基本は、型(値の種類)を中心にした分析とモジュール化。#jjug_ccc #ccc_a2
  • ドメインモデルとは(「現場で役立つシステム設計の原則」より) - 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
    「名前を設計する」という表現がよいなあ。こうやって具体的で意味が明確なクラス名を見つけるのが、クラス設計のコツなんだよなあ。
  • finalを付けるのをやめてみた - 日々常々

    Javaの話ね。バージョンは8以降の実質的final(effectively final)があるものとします。7以前は匿名クラス(この呼び方は 匿名クラスとかローカルクラスとか参照)でローカル変数を使うにはfinalが必要なので文脈変わります。 前提の整理 final は色々なところにつけられます。 例えばこんな感じ。 final class FooClass { final Object barField = new Object(); final void bazMethod(final Object quxParameter) { final Object corgeLocalVariable; } } このエントリで対象にするのは変数。フィールド barField 、パラメータ quxParameter、ローカル変数 corgeLocalVariable です。 以下を前提にします

    finalを付けるのをやめてみた - 日々常々
    masuda220
    masuda220 2019/09/28
    私もつけない。 デフォルト finalで可変にする場合のみ宣言が必要、というのが良いなあ。
  • ドメインモデルのつくり方 #5000dai

    仙台で行われたレッツゴーデベロッパーZERO ONEで登壇した資料です。

    ドメインモデルのつくり方 #5000dai
  • オブジェクト指向プログラミングを学ぶための推薦図書 - ソフトウェア設計を考える

    オブジェクト指向プログラミングを学ぶ オブジェクト指向プログラミングという言葉は、広い意味で使われている。 オブジェクト指向プログラミングをキーワードにすべての情報をかき集めて理解するというアプローチは現実には無理。 目に付いた重要そうなところを見繕って集めてみても、たぶん混乱するだけ。 この記事では、オブジェクト指向プログラミングのいろいろなアプローチの中で、 クラスを使って独自の「型」を定義するプログラミングスタイル 関連するデータとロジックをまとめて、小さな入れ物に格納する「カプセル化」を重視するプログラミングスタイル を学ぶための参考図書を紹介したい。 型とカプセル化に重点を置く設計スタイルがわかってくると、それとは異なるスタイル、異なる力点を置くアプローチとの違いが具体的にわかるようになってくる。*1 *2 まずは、オブジェクト指向プログラミングの中で、型・クラス・カプセル化に力

    オブジェクト指向プログラミングを学ぶための推薦図書 - ソフトウェア設計を考える
  • なぜ皆「生活費以上のお金を稼ぐこと」にそんなに興味を持てるのか

    稼ぎが生活費に達するまでは頑張るけど、それ以上は給料が上がったらラッキーくらいでいいじゃん、と思ってしまう 追記 伸びていて驚いた。 生活費という言い方は良くなかったかもしれない。病気や老後への備えの貯金や、多少の趣味に使う費用や交際費なども含んだお金、というものを表現したかった。 それを全て満たせるほどの収入があるのに、それでも忙しい副業やハイリスクな投資をしてまで収入を増やそう、増えたお金で支出を増やして、またさらに収入を増やして…、と考えるモチベーションが知りたかった。 (自分の場合だと運良く収入が増えたとしても、支出を増やさずに貯金に回すと思う。) 生活水準を上げるといっても、上には上があるのだからきりがないと感じてしまう。 確かに、自分は物欲が少ない方かもしれない。 追記2 「将来に備えて、家族のために、アーリーリタイアするために、今の内に稼いでおく」←わかる 「欲しいものがある

    なぜ皆「生活費以上のお金を稼ぐこと」にそんなに興味を持てるのか
  • ドメイン駆動設計という設計スタイル

    10. 設計スタイルの違い 2019/8/31 10 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API トランザクションスクリプト 画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型を定義 ドメインオブジェクトモデル 11. 設計スタイルの違い 2019/8/31 11 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API トランザクションスクリプト ドメインロジックの設計と実装が アプリケーション全体の構造を左右する 画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型でロジックを構造化 入出力の設計と実装が アプリケーション全体の構造を左右する ドメインオブジェクトモデル

    ドメイン駆動設計という設計スタイル
  • ドメイン駆動設計という設計スタイル

    10. 設計スタイルの違い 2019/8/31 10 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API トランザクションスクリプト 画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型を定義 ドメインオブジェクトモデル 11. 設計スタイルの違い 2019/8/31 11 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API トランザクションスクリプト ドメインロジックの設計と実装が アプリケーション全体の構造を左右する 画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型でロジックを構造化 入出力の設計と実装が アプリケーション全体の構造を左右する ドメインオブジェクトモデル

    ドメイン駆動設計という設計スタイル
    masuda220
    masuda220 2019/08/31
    今日の発表資料。私が現場でこだわっている設計スタイルのエッセンス。
  • 【 ルパン三世 カリオストロの城 】の、ミートボールスパゲッティ | パスタジャパン ~ 現役シェフが教えるイタリア料理 ~

    作品とシーンについて 「ルパン三世 カリオストロの城」は、モンキー・パンチ原作アニメ『ルパン三世』の劇場映画第2作(1979年公開)。スタジオジブリが立ち上がる前の作品なので、厳密には「ジブリ映画」とは呼べないものの、宮崎駿氏の映画初監督作であることと、丁寧な作画やアクションシーンはその後のジブリらしさが存分に発揮されており、ファンからも「ジブリ映画の初代」として広く認められています。ラストシーンの「あなたの心です。(by 銭形警部)」はアニメ界に残る名台詞。 (自前ラテアート) さて、今回再現する料理「ミートボールスパゲッティ」が出てくるのは、序盤で逃走中のルパンと次元がレストランで事しながら会話するシーン。 レストランといっても、地元の人たちが気軽に使う、大衆堂(居酒屋)といった風体のお店です。ここで大皿に盛られたスパゲッティを二人が取り合うコミカルな表現は、いかにも「ルパン」の世

    masuda220
    masuda220 2019/08/25
    プロの分析力と食へのこだわりがすごい。 アニメのワンシーンから、ここまでやるんだ。 楽しすぎるw。
  • Atomic Architecture

    すえなみチャンス暑気払い 2019夏で話した、設計要素を分解して理解してみようという話です。 Simplicity makes easy to understand.

    Atomic Architecture
    masuda220
    masuda220 2019/08/04
    設計要素の分解と、アーキテクチャスタイルの比較。 良い資料。
  • 私なりのオブジェクト指向プログラミングの定義 - kmizuの日記

    きしださんの以下のツイート オブジェクト指向はこの20年だれも再定義せずみんな自分の思うオブジェクト指向を暗黙に仮定して適当に話してるだけなので、技術的な共通認識のもとの議論はほとんどできないんですよ。という話を「オブジェクト指向をきちんと使いたいあなたへ」の記事に書いたのだけど、そろそろ公開するか— きしだൠ(K8S(Kishidades)) (@kis) July 29, 2019 を読んで、そういえば、私が思うオブジェクト指向の定義、についてツイッター以外ではあまり語ったことがなかったなと思い返し、ちょっと記事にしてみることにしました。まず、結論からいうと、私はオブジェクト指向プログラミングとは サブタイピングを活用したプログラミング手法の総称 と考えています。ここで、クラス継承とかインタフェース継承とかダックタイピングとかではなく、単にサブタイピングであるのがポイントです。なお、型

    私なりのオブジェクト指向プログラミングの定義 - kmizuの日記
    masuda220
    masuda220 2019/07/29
    まあ、そういうことですね。「普段、私がオブジェクト指向プログラミングとして意識するのは、クラスベースのオブジェクト指向プログラミング(特にできるだけ状態を不変にする)だったりする」
  • クラウドワークス プロダクトの持続的開発のためのリファクタリング実践アプローチ

    19/07/24開催の「持続可能なプロダクト開発への取り組み ~メドピアとクラウドワークスの事例公開~」における、クラウドワークス側の登壇資料です。 https://connpass.com/event/136791/

    クラウドワークス プロダクトの持続的開発のためのリファクタリング実践アプローチ
    masuda220
    masuda220 2019/07/25
    レガシーコードに立ち向かうためのやり方が具体的でわかりやすい
  • 大失敗した設計、そしてドメイン駆動設計の基本に立ち返る – 福地春喜のブログ

    ※ 2019年7月27日に追記しました。 この記事の最後に、失敗談の補足を書いた記事へのリンクを追加しました。 システムの一部機能を改修するテーマが現在進行中です。テーマは他の箇所に影響がないくらいに分離できるものです。この大きさが丁度いい。チャンスとばかりにリファクタリングすることにしました。 アプリケーションはそれなりにレイヤー化されています。controllerとserviceとrepositoryがある。よくある3層構造です。何を見直して再設計するのか?それはドメインオブジェクトモデルの構築です。 現状のアプリケーションはビジネスロジックをモデリングしたものとは言えない状態です。自分がやったのだけれど。しかしだからでもあります。なぜこうなったかを振り返り、どのようにできたかを考えます。失敗から学べることもあるはずです。 参照側の層は薄く?当に? 開発対象のシステムはある情報の検索

    masuda220
    masuda220 2019/07/22
    こういう現場での経験や取り組みを言葉にする活動は、多くの学びを生む。読む人にとっても貴重な実体験の参考情報だし、書いた人も、書くことで学びが深くなる。