狠狠撸

狠狠撸Share a Scribd company logo
俺がモデルだ!問題
に立ち向かう
末並 晃 ( @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(エンティティ?アトリビュート?バリュー)
? 可変属性をサポートするために、汎用的な属性テーブル
を使用して拡張性を持たせておくアンチパターン。
? 属性を自由に追加可能にはなるが、その各属性に対して
制約を設定することができない。
? このアンチパターンへの解決策としてサブタイプのモデ
リング方法が紹介されている。
? シングルテーブル継承、具象テーブル継承、クラス
テーブル継承
? メタデータはメタデータのために使いましょう
マテリアライズド?ビュー
? ビューの全レコードを実テーブルにキャッシュする
? ビューを構成しているテーブルに挿入/更新があった場
合にはマテリアライズド?ビューをリフレッシュする
? マテリアライズド?ビューは実テーブルのため、以下の
特性を利用できる
? インデックスの利用
? 主キーの存在
? その他(シャーディング等)
仕様(Speci?cation)パターン
? あるオブジェクトの仕様を別オブジェクトの責務として
切り出すというデザインパターン
? 仕様クラスは以下の振る舞いを持つ
? 評価(オブジェクトが仕様を満たしているかどうか判
定する)
? 選択(仕様を満たしているオブジェクトを抽出する)
? 生成(仕様を満たすオブジェクトを新たに生成する)
? ビジネスロジックを単一のクラスに閉じ込めることが
結論
「俺が…俺たちが…モデルだ!」
結論
? TDDを覚えるとコードを書くのが楽しくなる
? たくさんテストを書きたくなるし、そのためにたくさん
のプロダクトコードも書きたくなる
? 不安のコントロールの方法としてデータベース派の人た
ちのことがわかるといいのでは?

More Related Content

俺がモデルだ!问题に立ち向かう