Enviar pesquisa
Carregar
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
•
78 gostaram
•
17,562 visualizações
Yusuke Yamamoto
Seguir
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 67
Baixar agora
Baixar para ler offline
Recomendados
はじめてがアジャイル
はじめてがアジャイル
Kenichi Takahashi
Twitter API1.1 #twtr_hack
Twitter API1.1 #twtr_hack
Yusuke Yamamoto
第2.1回Twitter API勉強会 - 検索API
第2.1回Twitter API勉強会 - 検索API
Yusuke Yamamoto
20120125 チーム開発
20120125 チーム開発
Taichi Shindo
20151002 Android app for Pepper
20151002 Android app for Pepper
Kenichi Ohwada
Pepperのアプリ開発について - ABC2015 Summer -
Pepperのアプリ開発について - ABC2015 Summer -
Hirokazu Egashira
Twitter Cards #twtr_hack
Twitter Cards #twtr_hack
Yusuke Yamamoto
【16-B-2】 Yahoo!アジャイルクロニクル ~コーチとエンジニアの体験記~ 長岡実氏
【16-B-2】 Yahoo!アジャイルクロニクル ~コーチとエンジニアの体験記~ 長岡実氏
Developers Summit
Recomendados
はじめてがアジャイル
はじめてがアジャイル
Kenichi Takahashi
Twitter API1.1 #twtr_hack
Twitter API1.1 #twtr_hack
Yusuke Yamamoto
第2.1回Twitter API勉強会 - 検索API
第2.1回Twitter API勉強会 - 検索API
Yusuke Yamamoto
20120125 チーム開発
20120125 チーム開発
Taichi Shindo
20151002 Android app for Pepper
20151002 Android app for Pepper
Kenichi Ohwada
Pepperのアプリ開発について - ABC2015 Summer -
Pepperのアプリ開発について - ABC2015 Summer -
Hirokazu Egashira
Twitter Cards #twtr_hack
Twitter Cards #twtr_hack
Yusuke Yamamoto
【16-B-2】 Yahoo!アジャイルクロニクル ~コーチとエンジニアの体験記~ 長岡実氏
【16-B-2】 Yahoo!アジャイルクロニクル ~コーチとエンジニアの体験記~ 長岡実氏
Developers Summit
Twitter4Jとテスト
Twitter4Jとテスト
Yusuke Yamamoto
イベント企画運営の経験と実際 / The history of organizing events by me
イベント企画運営の経験と実際 / The history of organizing events by me
whywaita
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
Hisateru Tanaka
JAWS-UGサミット2011春 LT資料
JAWS-UGサミット2011春 LT資料
Yuuki Namikawa
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Toshiaki Maki
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
Yusuke Suzuki
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
Yusuke Suzuki
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Kazuko Shikiya
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!
zaki4649
Ninja framework使ってみた
Ninja framework使ってみた
eiryu
関西DB会.pdf
関西DB会.pdf
Evolve LLC.
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Yusuke Yamamoto
イカしたライブラリを作った話
イカしたライブラリを作った話
Keishin Yokomaku
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
Toshiaki Maki
meguro.rb LT
meguro.rb LT
Tsunenori Oohara
Webdb2011 hadoop
Webdb2011 hadoop
Ichiro Fukuda
YouTube APIの紹介
YouTube APIの紹介
Yoshifumi Yamaguchi
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Yuuki Takezawa
勉強会アンチパターン at LLまつり
勉強会アンチパターン at LLまつり
Hiro Yoshioka
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
Yusuke Yamamoto
これからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapy
Yusuke Yamamoto
Mais conteúdo relacionado
Semelhante a 失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
Twitter4Jとテスト
Twitter4Jとテスト
Yusuke Yamamoto
イベント企画運営の経験と実際 / The history of organizing events by me
イベント企画運営の経験と実際 / The history of organizing events by me
whywaita
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
Hisateru Tanaka
JAWS-UGサミット2011春 LT資料
JAWS-UGサミット2011春 LT資料
Yuuki Namikawa
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Toshiaki Maki
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
Yusuke Suzuki
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
Yusuke Suzuki
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Kazuko Shikiya
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!
zaki4649
Ninja framework使ってみた
Ninja framework使ってみた
eiryu
関西DB会.pdf
関西DB会.pdf
Evolve LLC.
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Yusuke Yamamoto
イカしたライブラリを作った話
イカしたライブラリを作った話
Keishin Yokomaku
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
Toshiaki Maki
meguro.rb LT
meguro.rb LT
Tsunenori Oohara
Webdb2011 hadoop
Webdb2011 hadoop
Ichiro Fukuda
YouTube APIの紹介
YouTube APIの紹介
Yoshifumi Yamaguchi
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Yuuki Takezawa
勉強会アンチパターン at LLまつり
勉強会アンチパターン at LLまつり
Hiro Yoshioka
Semelhante a 失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
(20)
Twitter4Jとテスト
Twitter4Jとテスト
イベント企画運営の経験と実際 / The history of organizing events by me
イベント企画運営の経験と実際 / The history of organizing events by me
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
JAWS-UGサミット2011春 LT資料
JAWS-UGサミット2011春 LT資料
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!
Ninja framework使ってみた
Ninja framework使ってみた
関西DB会.pdf
関西DB会.pdf
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
イカしたライブラリを作った話
イカしたライブラリを作った話
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
meguro.rb LT
meguro.rb LT
Webdb2011 hadoop
Webdb2011 hadoop
YouTube APIの紹介
YouTube APIの紹介
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
勉強会アンチパターン at LLまつり
勉強会アンチパターン at LLまつり
Mais de Yusuke Yamamoto
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
Yusuke Yamamoto
これからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapy
Yusuke Yamamoto
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
Yusuke Yamamoto
JetBrains IDEハンズオン
JetBrains IDEハンズオン
Yusuke Yamamoto
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Yusuke Yamamoto
Java Küche 2016 #JavaKueche
Java Küche 2016 #JavaKueche
Yusuke Yamamoto
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
Yusuke Yamamoto
WebStormから始まる快適Web開発ワークフロー #html5jk
WebStormから始まる快適Web開発ワークフロー #html5jk
Yusuke Yamamoto
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
Yusuke Yamamoto
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Yusuke Yamamoto
カジュアルにスレッドダンプ - @yusuke #javacasual
カジュアルにスレッドダンプ - @yusuke #javacasual
Yusuke Yamamoto
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Yusuke Yamamoto
Twitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hack
Yusuke Yamamoto
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
Yusuke Yamamoto
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Yusuke Yamamoto
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Yusuke Yamamoto
貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujp
Yusuke Yamamoto
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
Yusuke Yamamoto
JavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumi
Yusuke Yamamoto
Mais de Yusuke Yamamoto
(20)
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
これからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapy
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
JetBrains IDEハンズオン
JetBrains IDEハンズオン
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 #JavaKueche
Java Küche 2016 #JavaKueche
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
WebStormから始まる快適Web開発ワークフロー #html5jk
WebStormから始まる快適Web開発ワークフロー #html5jk
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
カジュアルにスレッドダンプ - @yusuke #javacasual
カジュアルにスレッドダンプ - @yusuke #javacasual
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Twitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hack
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujp
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
JavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumi
Último
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Último
(7)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
1.
YusukeYamamoto 失敗から学ぶAPI設計 山本 裕介 @yusuke #ccc_h4
2.
YusukeYamamoto 前回までのあらすじ
3.
YusukeYamamoto 前回までのあらすじ No GGRKS! 使ってもらうためにはどんな汚いことでもする 対象プラットフォームを増やす 外部ライブラリ非依存
4.
YusukeYamamoto •Twitter APIのJavaラッパ •開発は2007年5月∼
5.
YusukeYamamoto Twitter4Jは •再利用されているライブラリ https://wiki.fitbit.com/display/API/API+Java+Client
6.
YusukeYamamoto Twitter4Jは •再利用されているライブラリ http://code.google.com/p/weibo4j/
7.
YusukeYamamoto Twitter4Jは •再利用されているライブラリ http://facebook4j.org
8.
YusukeYamamoto Twitter4Jは •イイライブラリ
9.
YusukeYamamoto Twitter4Jは •イイライブラリとは
10.
YusukeYamamoto Twitter4Jは •イイライブラリとは • 優れたコストパフォーマンス • 機能が豊富 •
品質が高い
11.
YusukeYamamoto Twitter4Jは •イイライブラリ • 多くのユーザーが使っている • コミュニティが活発 •
拡張しやすい • 使いやすい
12.
YusukeYamamoto Twitter4Jは •イイライブラリ • 多くのユーザーが使っている • コミュニティが活発 •
拡張しやすい • 使いやすい API・設計
13.
YusukeYamamoto APIとは • Application Programming
Interface •何らかの機能を呼び出す口
14.
YusukeYamamoto Twitter4JのAPIは •Twitter APIの射影
15.
YusukeYamamoto Twitter4JのAPIは •Twitter APIの射影 •現在のところ対象外 • キャッシング・永続化 •
フレームワーク的なこと
16.
YusukeYamamoto Twitter4J実装の変遷 • バージョン1.0 • Twitter
APIのXMLのエンドポイント利用 • バージョン2.0 • OAuthサポート • domオブジェクトを保持しなくなった
17.
YusukeYamamoto Twitter4J実装の変遷 • バージョン2.1 • 非推奨クラス、メソッドをバッサリ •
Factoryの導入 • バージョン2.2 • Basic認証廃止 • ライセンスをBSDからASLに変更
18.
YusukeYamamoto Twitter4J実装の変遷 • バージョン3.0 • Twitter
API 1.1対応
19.
YusukeYamamoto Twitter4Jの開発指針
20.
YusukeYamamoto シンプルに
21.
YusukeYamamoto シンプルに YAGNI
22.
YusukeYamamoto シンプル・YAGNI •クラス数は極力少なく
23.
YusukeYamamoto シンプル・YAGNI •クラス数は極力少なく •インターフェースは(なるべく) 使わない!
24.
YusukeYamamoto シンプル・YAGNI •拡張ポイントはなるべく少なく
25.
YusukeYamamoto (なるべく)immutableに
26.
YusukeYamamoto Twitter4Jの拡張ポイント •クラス継承はさせない • 基本finalにして継承を防ぐ • 副作用を生まずに継承を許す設計は すごく難しい •strategyパターンとか言語道断 (一部除く)
27.
YusukeYamamoto シンプル・YAGNI •Twitter4Jの拡張ポイント • HTTP認証 • 非同期ディスパッチャ •
ロガー • HTTPクライアント
28.
YusukeYamamoto シンプル・YAGNI •Twitter4Jの拡張ポイント • HTTP認証 • 非同期ディスパッチャ •
ロガー • HTTPクライアント ほとんどのデベロッパは拡張しない
29.
YusukeYamamoto デザインパターンを適用
30.
YusukeYamamoto デザインパターンを適用しない
31.
YusukeYamamoto デザインパターンを適用しない Twitter twitter =
new Twitter(); List<Status> statuses = twitter.getPublicTimeline(); for(Status status : statuses){ System.out.println(status.getText()); } 多くのプログラマはFactoryとかわからない まずはコンクリートコンストラクタで。
32.
YusukeYamamoto IDEの補完を活かせるように
33.
YusukeYamamoto IDEの補完を活かせるように http://www.youtube.com/watch?v=Nk9CUxEuUww 補完の例
34.
YusukeYamamoto IDEの補完を活かせるように •なるべく同一パッケージに •一般的過ぎるクラス名にしない
35.
YusukeYamamoto IDEの補完が活きすぎないように • 使うべきでないクラス名を異様にする •z_T4JInternal******
36.
YusukeYamamoto Twitter4Jの成長
37.
YusukeYamamoto シンプルなTwitter4J 32 KB
38.
YusukeYamamoto シンプルだったTwitter4J 5.1 MB32 KB
39.
YusukeYamamoto 互換性維持の苦労
40.
YusukeYamamoto 互換性維持の苦労 •APIが増える •レスポンススキーマが変わる •ステータスコードが変わる •いつの間にか要素が増えてる •認証方式が変わる •エンドポイントURLが変わる...
41.
YusukeYamamoto Twitter4Jの成長 •Twitter APIの成長 •Twitter4Jの成長 • 膨らむクラス数 •
膨らむメソッド数 • 膨らむアクセサ数
42.
YusukeYamamoto Twitter4Jの成長 •至上命題 互換性の維持
43.
YusukeYamamoto 互換性のために大事なこと •クラス名を変えない
44.
YusukeYamamoto 互換性のために大事なこと •メソッド名を変えない
45.
YusukeYamamoto 互換性のために大事なこと •挙動を変えない
46.
YusukeYamamoto 互換性のために大事なこと •直列化形式の互換性を保つ
47.
YusukeYamamoto 互換性のために大事なこと • 直列化形式の互換性を保つ Java Object
Serialization Specification Versioning of Serializable Objects 5.6.1 Incompatible Changes 5.6.2 Compatible Changes http://docs.oracle.com/javase/7/docs/platform/serialization/spec/version.html#6678 • 現在の所テストケースはなく「気をつける」だけ で互換性を保っている
48.
YusukeYamamoto 互換性のために大事なこと • 非互換はコンパイラに検出させる
49.
YusukeYamamoto 互換性を維持できた例 •User.java • ユーザー情報 •UserWithStatus.java • ユーザー情報+α Extended
user information with status User information
50.
YusukeYamamoto 互換性を維持できた例 class User{} class UserWithStatus
extends User{ getFriendsCount();getFollowersCount(); } バージョン1.0
51.
YusukeYamamoto 互換性を維持できた例 class User{ getFriendsCount();getFollowersCount(); } /** @deprecated
*/ class UserWithStatus extends User{ } バージョン1.0.4 getterを上位クラスに移動
52.
YusukeYamamoto 互換性を維持できた例 class User{ getFriendsCount();getFollowersCount(); } /** @deprecated
*/ class UserWithStatus extends User{ } バージョン1.0.4 UserWithStatusは非推奨、コンパイラが警告
53.
YusukeYamamoto 互換性を維持できた例 class User{ getFriendsCount();getFollowersCount(); } /** @deprecated
*/ class UserWithStatus extends User{ } バージョン2.0 UserWithStatusを廃止、コンパイラがエラーを出す
54.
YusukeYamamoto Twitter4Jの失敗
55.
YusukeYamamoto Twitter4Jの失敗 •パッケージ分けの失敗 •API設計の失敗
56.
YusukeYamamoto パッケージ分けの失敗 •パッケージ分け • twitter4j.* • twitter4j.api.* •
twitter4j.auth.* • twitter4j.management.* • twitter4j.internal.*
57.
YusukeYamamoto パッケージ分けの失敗 •パッケージ分けしすぎると • クラスが見つけられない • 特に貧弱なエディタを使っている場合 •
blogのコード例をコピペしても動かない • import部分の記載がないことが多い • JavaDocの読み方がわからないプログラマは非常に多い
58.
YusukeYamamoto パッケージ分けの失敗 •下手にパッケージ分けすると • 言語使用上仕方なくpublicなクラスが使 われてしまう このパッケージはあのパッケージに対してのみ 公開、とかできるといいが少なくともJavaでは できない。
59.
YusukeYamamoto 解決策 • コードの見通しの問題であればパッケー ジ分けしない • かわりにソースディレクトリを分ける •
クラス可視性はpackage privateで
60.
YusukeYamamoto mavenでソースディレクトリの分ける設定 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>internal-json</source> <source>internal-async</source> </sources> </configuration> </execution> </executions> </plugin>
61.
YusukeYamamoto API設計の失敗 Twitter twitter =
new Twitter();
62.
YusukeYamamoto API設計の失敗 •コンクリートコンストラクタ •ユーザーにはわかりやすい •が、モックテストしづらい Twitter twitter =
new Twitter();
63.
YusukeYamamoto API設計の失敗 • Twitterをクラスからインターフェースへ • Factoryを導入 •
Twitterインターフェースを実装したモックを作れる Twitter twitter = new TwitterFactory().getInstance();
64.
YusukeYamamoto API設計の失敗 • やはりFactoryパターンは難しい • Singletonを返すstaticメソッドを導入 •
あまり知られていない、使われていない Twitter twitter = TwitterFactory.getSingleton();
65.
YusukeYamamoto 参考図書 •Effective Java
66.
YusukeYamamoto 参考図書 •Practical API Design
67.
YusukeYamamoto #ccc_h4 #q ?
Baixar agora