狠狠撸

狠狠撸Share a Scribd company logo
中规模なアプリ开発苦労话




                                                  photo by Alan Bell
                    http://www.?ickr.com/photos/belalan/213282261/
13年1月25日金曜日
自己绍介
                                        photo by poluz!
                     http://www.?ickr.com/photos/poluz
13年1月25日金曜日
小山田 浩(@h5y1m141)




                                     JavaScript
         エンジニアではありませんが       (JScript,Titanium Mobileな
         趣味でTitaniumいじってます         ど)経験2年程度
                              ※最近はCo?eeScript好き

13年1月25日金曜日
Agenda
              ? これから話すこと
               ? 今作ってるアプリを簡単に紹介
               ? 自分の中の设计方针
              ? 今日話さないこと
               ? ソースコードの細かい解説
                ※気になる方はLT終了後お声がけ下さい


13年1月25日金曜日
今作ってるアプリ
                                        Photo By fotologic
                    http://www.?ickr.com/photos/fotologic/
13年1月25日金曜日
Qiitaのビューワーアプリ




13年1月25日金曜日
中规模ってどの程度?




                                        photo by Laurie Pink
                    http://www.?ickr.com/photos/laurie_pink/
13年1月25日金曜日
あくまで自分の中で中规模
                 という話です
     ?   人生初のコード1000行超
         ※現在1334行

         ?    underscore.js、moment.js
              等のライブラリとjasmineのテ
              ストコードは除いた数値

     ?   MVC的にファイルを分割

         ?    分割方法、ファイルのネーミン
              グに現在悩んでる




13年1月25日金曜日
アプリの构成要素:主要な鲍滨
     mainTable
                                        con?gTable




                              con?gWindow
                                            webView
     menuTable



                 mainWindow



                              WebViewWindow
13年1月25日金曜日
罢补产濒别痴颈别飞は使い回してる
                  mainTable   ローカルにキャッシュ




                                投稿情報
                                投稿情報
                                 投稿情報
                                 投稿情報




     mainWindow




13年1月25日金曜日
画面迁移のロジックはシンプル


                            moveToConfigWindow: () ->
                            ????configMenu = require("ui/configMenu")
                            ????menu = new configMenu()
                            ????configWindow = new win()
                            ????configWindow.title = "アカウント情報"
                            ????configWindow.backButtonTitle = '戻る'
                            ????configWindow.add menu
                            ????return tab.open(configWindow)




                               con?gWindow


                            moveToWebViewWindow: () ->


               mainWindow
                            ????actionBtn = Ti.UI.createButton
                            ??????systemButton: Titanium.UI.iPhone.SystemButton.ACTION

                            ????actionBtn.addEventListener('click',()->
                                  # 省略
                            ????webview.show()
                            ????webWindow.rightNavButton = actionBtn
                            ????return tab.open(webWindow)


                             WebViewWindow
13年1月25日金曜日
罢补产濒别痴颈别飞の入れ替え&书き换えとか
           スパゲッティコードになりそう??

              左上ナビボタン:click   menuTable:click



                               QiitaAPIを利用する独自モ
                               デル定義しておりそれを呼
                 mainTableス            び出す
                 ライドと半透
                               1.該当のURLエンドポイントアクセス
                    明化         2.アイテム取得出来たらローカルにキャッシュ
                               3.QiitaAPIのリクエストヘッダーに次ページの
                               URL情報含まれているので取り出しておく




13年1月25日金曜日
自分の中の设计方针


              ?1メソッド1画面程度にする
              ? 先人の知恵を活用してスパゲッ
              ティコード化を防ぐ




                                             photo by aagius
                         http://www.?ickr.com/photos/aagius/
13年1月25日金曜日
尘补颈苍罢补产濒别スライドと半透明化処理で
                    Stateパターン
   class defaultState                                          class slideState
   ??constructor: () ->                                        ??constructor: () ->
   ????                                                        ?????
   ??sayState: () ->                                           ??sayState: () ->
   ????return "STATE: 標準状態"                                    ????return "STATE: スライド状態"
   ??moveBackward: () ->                                       ????
                                                               ??moveBackward: () ->
   ????# return new defaultState()                             ????Ti.App.Properties.setBool("stateMainTable狠狠撸",false)
   ??moveForward: () ->                                        ????mainTable.touchEnabled = true
   ????Ti.API.info "ACTION: スライド開始"                            ????
   ????Ti.App.Properties.setBool("stateMainTable狠狠撸",true)   ????mainTable.setOpacity(1.0)
   ????mainTable.touchEnabled = false                          ????mainTable.animate({
   ????mainTable.animate({                                     ??????duration:200
   ??????duration:200                                          ??????left:0
   ??????left:160                                              ????},()->
   ????}, ()->                                                 ??????# Ti.API.info "アニメーション終了"
   ??????mainTable.setOpacity(0.5)                             ????
   ????)????                                                   ????)
   ????return new slideState()                                 ????return new defaultState()
   module.exports = defaultState                               ????
                                                               ??moveForward: () ->
                                                               ????Ti.API.info "この状態では何もしない"
                                                               ????????
                                                               module.exports = slideState




13年1月25日金曜日
尘别苍耻罢补产濒别の各项目をクリック后の
                 処理はCommandパターン

                        getMyStocksCommand()

                        1.qiita.getMyStocks()実行
                        2.次ページのURL情報が後々必要
                        になるためTi.App.Properties
                        で格納
                        3. ActivityIndicatorの制御
                        4.その他??

                        getFollowingTagsCommand(tags)

                        ※まだ実装してないけど上記と似
                        たような処理になる予定


13年1月25日金曜日
骋颈迟贬耻产上にコードありますので気に
               なる方はご覧くださいー




13年1月25日金曜日
ご清聴ありがとうご
                ざいました


13年1月25日金曜日

More Related Content

20130125 titanium meetupvol5

  • 1. 中规模なアプリ开発苦労话 photo by Alan Bell http://www.?ickr.com/photos/belalan/213282261/ 13年1月25日金曜日
  • 2. 自己绍介 photo by poluz! http://www.?ickr.com/photos/poluz 13年1月25日金曜日
  • 3. 小山田 浩(@h5y1m141) JavaScript エンジニアではありませんが (JScript,Titanium Mobileな 趣味でTitaniumいじってます ど)経験2年程度 ※最近はCo?eeScript好き 13年1月25日金曜日
  • 4. Agenda ? これから話すこと ? 今作ってるアプリを簡単に紹介 ? 自分の中の设计方针 ? 今日話さないこと ? ソースコードの細かい解説 ※気になる方はLT終了後お声がけ下さい 13年1月25日金曜日
  • 5. 今作ってるアプリ Photo By fotologic http://www.?ickr.com/photos/fotologic/ 13年1月25日金曜日
  • 7. 中规模ってどの程度? photo by Laurie Pink http://www.?ickr.com/photos/laurie_pink/ 13年1月25日金曜日
  • 8. あくまで自分の中で中规模 という話です ? 人生初のコード1000行超 ※現在1334行 ? underscore.js、moment.js 等のライブラリとjasmineのテ ストコードは除いた数値 ? MVC的にファイルを分割 ? 分割方法、ファイルのネーミン グに現在悩んでる 13年1月25日金曜日
  • 9. アプリの构成要素:主要な鲍滨 mainTable con?gTable con?gWindow webView menuTable mainWindow WebViewWindow 13年1月25日金曜日
  • 10. 罢补产濒别痴颈别飞は使い回してる mainTable ローカルにキャッシュ 投稿情報 投稿情報 投稿情報 投稿情報 mainWindow 13年1月25日金曜日
  • 11. 画面迁移のロジックはシンプル moveToConfigWindow: () -> ????configMenu = require("ui/configMenu") ????menu = new configMenu() ????configWindow = new win() ????configWindow.title = "アカウント情報" ????configWindow.backButtonTitle = '戻る' ????configWindow.add menu ????return tab.open(configWindow) con?gWindow moveToWebViewWindow: () -> mainWindow ????actionBtn = Ti.UI.createButton ??????systemButton: Titanium.UI.iPhone.SystemButton.ACTION ????actionBtn.addEventListener('click',()-> # 省略 ????webview.show() ????webWindow.rightNavButton = actionBtn ????return tab.open(webWindow) WebViewWindow 13年1月25日金曜日
  • 12. 罢补产濒别痴颈别飞の入れ替え&书き换えとか スパゲッティコードになりそう?? 左上ナビボタン:click menuTable:click QiitaAPIを利用する独自モ デル定義しておりそれを呼 mainTableス び出す ライドと半透 1.該当のURLエンドポイントアクセス 明化 2.アイテム取得出来たらローカルにキャッシュ 3.QiitaAPIのリクエストヘッダーに次ページの URL情報含まれているので取り出しておく 13年1月25日金曜日
  • 13. 自分の中の设计方针 ?1メソッド1画面程度にする ? 先人の知恵を活用してスパゲッ ティコード化を防ぐ photo by aagius http://www.?ickr.com/photos/aagius/ 13年1月25日金曜日
  • 14. 尘补颈苍罢补产濒别スライドと半透明化処理で Stateパターン class defaultState class slideState ??constructor: () -> ??constructor: () -> ???? ????? ??sayState: () -> ??sayState: () -> ????return "STATE: 標準状態" ????return "STATE: スライド状態" ??moveBackward: () -> ???? ??moveBackward: () -> ????# return new defaultState() ????Ti.App.Properties.setBool("stateMainTable狠狠撸",false) ??moveForward: () -> ????mainTable.touchEnabled = true ????Ti.API.info "ACTION: スライド開始" ???? ????Ti.App.Properties.setBool("stateMainTable狠狠撸",true) ????mainTable.setOpacity(1.0) ????mainTable.touchEnabled = false ????mainTable.animate({ ????mainTable.animate({ ??????duration:200 ??????duration:200 ??????left:0 ??????left:160 ????},()-> ????}, ()-> ??????# Ti.API.info "アニメーション終了" ??????mainTable.setOpacity(0.5) ???? ????)???? ????) ????return new slideState() ????return new defaultState() module.exports = defaultState ???? ??moveForward: () -> ????Ti.API.info "この状態では何もしない" ???????? module.exports = slideState 13年1月25日金曜日
  • 15. 尘别苍耻罢补产濒别の各项目をクリック后の 処理はCommandパターン getMyStocksCommand() 1.qiita.getMyStocks()実行 2.次ページのURL情報が後々必要 になるためTi.App.Properties で格納 3. ActivityIndicatorの制御 4.その他?? getFollowingTagsCommand(tags) ※まだ実装してないけど上記と似 たような処理になる予定 13年1月25日金曜日
  • 16. 骋颈迟贬耻产上にコードありますので気に なる方はご覧くださいー 13年1月25日金曜日
  • 17. ご清聴ありがとうご ざいました 13年1月25日金曜日