Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Speeda新機能開発にddd tddを取り入れた話

385 views

Published on

TDDとDDDを取り込んで新しいプロジェクトを開発中に苦労したエピソードベスト4

Published in: Software
  • Be the first to comment

Speeda新機能開発にddd tddを取り入れた話

  1. 1. SPEEDA新機能開発に DDD/TDDを取り入れた話
  2. 2. 自己紹介 - ヤップ・ジェイソン - フィリピン出身 - 東京で働いて4年目 - ユーザベースに2014年11月入社 - 現在 SPEEDAプロジェクトチーム
  3. 3. SPEEDAとは - 企業・業界分析の情報フラットホーム - 全世界330万社超 / 550業界のデータ - 世界最大級のM&Aデータ - 2009年6月ローンチ - 600社超に導入済み(国外含む)
  4. 4. SPEEDAにある帳票(PIB - Public Information Book )- 企業の包括的なレポート - 企業概要、競合比較表、いろいろなチャート等 - Word, PPT, PDFのフォーマット形式にてダウンロードできる - 約14ページ
  5. 5. PIBはすごくリッチなレポートだけど長すぎて読む 時間がない
  6. 6. クイックサマリーを作ろう
  7. 7. クイックサマリー (ファーストバージョン) - 日本上場企業 - PDFのみ - レイアウトが固定
  8. 8. デベロッパー:2人 私先輩
  9. 9. よっしゃ!TDDとDDDやる ぞ!! TDDとDDDを勉強したい! やらせてください!! ありがとうございます!! うい〜
  10. 10. アーキテクチャー
  11. 11. 言語・ツール - Java 8 - Scala (結合テスト) - AsposePDF (PDF作成ライブラリ)
  12. 12. 苦労したエピソードベスト4 1. ビジネスモデルをコード化する 2. ソースコード自体を仕様書にする 3. クラスの名前 4. クラスっていつ作るの?テスト書く前?テスト書いた後?
  13. 13. 4. Javaクラスっていつ作るの?テスト書く前? テスト書いた後?
  14. 14. CompanyRepositoryTest# GetCompanyById CompanyRepository#get
  15. 15. CompanyRepositoryTest# GetCompanyById CompanyRepository#get
  16. 16. CompanyFactory#create CompanyProfile Company Name Ticker Address CompanyRepositoryTest# GetCompanyById CompanyRepository#get hoge hoge hoge
  17. 17. CompanyFactory#create CompanyProfile Company Name Ticker Address CompanyRepositoryTest# GetCompanyById CompanyRepository#get テストを書くのを 忘れちゃう hoge hoge hoge
  18. 18. 1. テストを書く (クラスやメソッドが存在しないのでコンパイルエラーになる) 1. メソッドの実装がまだなので、モックフレームワークを使う (JMockit) 1. コンパイルエラーになっているクラスやメソッドを作る 1. テスト実行 1. 実装がないメソッドのテストを書く
  19. 19. CompanyFactory#create CompanyProfile CompanyRepositoryTest# GetCompanyById CompanyRepository#get JMockitでcreateメソッド をモックする 何もないオブジェク トを作るだけ
  20. 20. 3. クラスの名前
  21. 21. ユビキタス言語 (Ubiquitous language)
  22. 22. ユビキタス言語 (Ubiquitous language) ユビキタス言語とは、Eric Evansが『Domain Driven Design』において、開発者とユ ーザーとの間で共通の厳格な意 味を持つ用語を構築するという プラクティスを表すために使用 した用語である。 http://bliki-ja.github.io/UbiquitousLanguage/
  23. 23. ユーザベースが日本企業なのでみんなが日本語を使 っている
  24. 24. ただ、クラス名とかローマ字にするとちょっとわか りにくい
  25. 25. もしオフショアチームができたら日本語がわからない
  26. 26. やっぱり英語で
  27. 27. 上司 市場情報を入れて 私
  28. 28. StockMarket Market Exchange 私
  29. 29. 英語得意でこの業務に詳しい人に聞かないと
  30. 30. StockMarketでよさそう! Subject Matter Expert (その業務の専門家) 私
  31. 31. 2. ソースコード自体を仕様書にする
  32. 32. 非上場の場合、Ticker (証券コード)がない 住所のデータがない企業が多い
  33. 33. Java8のOptionalが助けてくれる
  34. 34. でもOptionalってserializableじゃないでしょう
  35. 35. 厳密ではないですが、実装等をなるべくdomain classに意識させない。
  36. 36. 1. ビジネスモデルをコード化する
  37. 37. 仕様書
  38. 38. SPEEDA業務 SPEEDA業務
  39. 39. PDF Generator ServiceFactoryRepository JSON SPEEDAドメイ ンクラス 帳票 (PDF)パラメータ
  40. 40. PDF Generator ServiceFactoryRepository JSON SPEEDAドメイ ンクラス 帳票用 SPEEDA ドメインクラス 帳票 (PDF)パラメータ
  41. 41. PDF Page Page Page ComponentGroup ComponentGroup Component Component Component Element Element Element Element SPEEDAドメ インクラス Component Element SPEEDAドメ インクラス
  42. 42. リリースした
  43. 43. 今後TDDとDDDを他のプロジェクトにも採用するの で
  44. 44. エンジニアを募集中です。 TDDとDDDに興味がある方、技術好きな方はぜひ
  45. 45.

×