SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
俺がモデルだ!問題
に立ち向かう
末並 晃 ( @a_suenami )
お断り
あまりテストの話はしません!
自己紹介
• 株式会社ファクトリアル
• Web系受託プログラマ
• RubyとかPHPとか(最近Scalaに興味)
• 好きなもの
• テスト
• オブジェクト指向
俺がモデルだ!問題とは?
• システム開発においてビジネスロジックを記述するレイ
ヤーがどこなのか問題
• 某アニメの有名な台詞をパロってこう呼ばれる完全な社
内用語
• データベースエンジニアは自分の設計したRDBこそがビ
ジネスロジックだと言い、アプリケーションエンジニア
は自分の実装したドメインモデル/サービスこそがビジ
ネスロジックだと主張する
例1. 最新の記事
CREATE VIEW latest_articles
AS SELECT * FROM articles
WHERE created_at >= CURRENT_DATE - INTERVAL 7 day
def latest
where(“created_at >= ?”, Date.today - 7)
end
データビューを作成
モデルにメソッドを実装
例2. 管理者と一般ユーザ
参考書籍
EAV(エンティティ・アトリビュート・バリュー)
EAV(エンティティ・アトリビュート・バリュー)
• 可変属性をサポートするために、汎用的な属性テーブル
を使用して拡張性を持たせておくアンチパターン。
• 属性を自由に追加可能にはなるが、その各属性に対して
制約を設定することができない。
• このアンチパターンへの解決策としてサブタイプのモデ
リング方法が紹介されている。
• シングルテーブル継承、具象テーブル継承、クラス
テーブル継承
• メタデータはメタデータのために使いましょう
マテリアライズド・ビュー
• ビューの全レコードを実テーブルにキャッシュする
• ビューを構成しているテーブルに挿入/更新があった場
合にはマテリアライズド・ビューをリフレッシュする
• マテリアライズド・ビューは実テーブルのため、以下の
特性を利用できる
• インデックスの利用
• 主キーの存在
• その他(シャーディング等)
仕様(Specification)パターン
• あるオブジェクトの仕様を別オブジェクトの責務として
切り出すというデザインパターン
• 仕様クラスは以下の振る舞いを持つ
• 評価(オブジェクトが仕様を満たしているかどうか判
定する)
• 選択(仕様を満たしているオブジェクトを抽出する)
• 生成(仕様を満たすオブジェクトを新たに生成する)
• ビジネスロジックを単一のクラスに閉じ込めることが
結論
「俺が…俺たちが…モデルだ!」
結論
• TDDを覚えるとコードを書くのが楽しくなる
• たくさんテストを書きたくなるし、そのためにたくさん
のプロダクトコードも書きたくなる
• 不安のコントロールの方法としてデータベース派の人た
ちのことがわかるといいのでは?

Contenu connexe

Similaire à 俺がモデルだ!問題に立ち向かう

Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Tokoroten Nakayama
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Drecom Co., Ltd.
 
サービスクラス、その前に
サービスクラス、その前にサービスクラス、その前に
サービスクラス、その前にYasutomo Uemori
 
20170710 hifive-test-meetup
20170710 hifive-test-meetup20170710 hifive-test-meetup
20170710 hifive-test-meetupNaoya Kojima
 
フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。Yutaka Horikawa
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
20150531 phpcon kansai
20150531 phpcon kansai20150531 phpcon kansai
20150531 phpcon kansaikumamidori
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる啓 小笠原
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
概観テキストマイニング
概観テキストマイニング概観テキストマイニング
概観テキストマイニングtod esking
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺Yusuke Wada
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みhaljik Seiji
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料Takashi Aoe
 
ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】schoowebcampus
 
モバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousan
モバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousanモバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousan
モバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousanAndrey Chernov
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスYoichi KIKUCHI
 

Similaire à 俺がモデルだ!問題に立ち向かう (20)

Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
サービスクラス、その前に
サービスクラス、その前にサービスクラス、その前に
サービスクラス、その前に
 
20170710 hifive-test-meetup
20170710 hifive-test-meetup20170710 hifive-test-meetup
20170710 hifive-test-meetup
 
Kaleidox
KaleidoxKaleidox
Kaleidox
 
フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
20150531 phpcon kansai
20150531 phpcon kansai20150531 phpcon kansai
20150531 phpcon kansai
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
概観テキストマイニング
概観テキストマイニング概観テキストマイニング
概観テキストマイニング
 
Tech fun rails_workshop
Tech fun rails_workshopTech fun rails_workshop
Tech fun rails_workshop
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
 
Softlayer_bluemix-summit
Softlayer_bluemix-summitSoftlayer_bluemix-summit
Softlayer_bluemix-summit
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
 
ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】
 
モバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousan
モバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousanモバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousan
モバイルアプリパフォーマンス向上の道を踏み出す前に知っておきたいコト!@andousan
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
 

Plus de Akira Suenami

糖質とプログラミングと私
糖質とプログラミングと私糖質とプログラミングと私
糖質とプログラミングと私Akira Suenami
 
糖質制限超入門
糖質制限超入門糖質制限超入門
糖質制限超入門Akira Suenami
 
今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014Akira Suenami
 
マジックビーンズ
マジックビーンズマジックビーンズ
マジックビーンズAkira Suenami
 
Symfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LTSymfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LTAkira Suenami
 
シュードキーニートフリーク
シュードキーニートフリークシュードキーニートフリーク
シュードキーニートフリークAkira Suenami
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?Akira Suenami
 
Wip prをやってみた
Wip prをやってみたWip prをやってみた
Wip prをやってみたAkira Suenami
 
今年かかった麻疹まとめ
今年かかった麻疹まとめ今年かかった麻疹まとめ
今年かかった麻疹まとめAkira Suenami
 
デザイナのためのGit講座
デザイナのためのGit講座デザイナのためのGit講座
デザイナのためのGit講座Akira Suenami
 
アジャイル開発振り返り
アジャイル開発振り返りアジャイル開発振り返り
アジャイル開発振り返りAkira Suenami
 
Xp祭りに行ってきた
Xp祭りに行ってきたXp祭りに行ってきた
Xp祭りに行ってきたAkira Suenami
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方Akira Suenami
 

Plus de Akira Suenami (13)

糖質とプログラミングと私
糖質とプログラミングと私糖質とプログラミングと私
糖質とプログラミングと私
 
糖質制限超入門
糖質制限超入門糖質制限超入門
糖質制限超入門
 
今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014
 
マジックビーンズ
マジックビーンズマジックビーンズ
マジックビーンズ
 
Symfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LTSymfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LT
 
シュードキーニートフリーク
シュードキーニートフリークシュードキーニートフリーク
シュードキーニートフリーク
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?
 
Wip prをやってみた
Wip prをやってみたWip prをやってみた
Wip prをやってみた
 
今年かかった麻疹まとめ
今年かかった麻疹まとめ今年かかった麻疹まとめ
今年かかった麻疹まとめ
 
デザイナのためのGit講座
デザイナのためのGit講座デザイナのためのGit講座
デザイナのためのGit講座
 
アジャイル開発振り返り
アジャイル開発振り返りアジャイル開発振り返り
アジャイル開発振り返り
 
Xp祭りに行ってきた
Xp祭りに行ってきたXp祭りに行ってきた
Xp祭りに行ってきた
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方
 

俺がモデルだ!問題に立ち向かう