Refactor - service packge


導入する


今回のキャンペーンでは、音楽プレーヤーのサービス関連類を再包装する.
まず再包装結果を確認し、再包装過程を共有します.

結果


AS-ISTO-BE

実習


Step1. パッケージとRenameの再構成


AS-ISTO-BEは問題と解決策1の依存性が強く、拡張性が低く、インタフェースを通じて依存性を解消し、問題と解決策2変数を増加し、方法名が不明確な再命名によって明確な問題と解決策3が直接実施するSeekbarThread消去計画実行器によって定期的に命令を実行する

Step2. SeekbarThread->計画実行サービスへの変更

  • AS-IS
  • override fun run() {
        while (runFlag) {
            for (observer in observers) {
                observer.setCurrentProgress(currentStatus)
            }
            try {
                Thread.sleep(1000)
            } catch (e: InterruptedException) {
                e.printStackTrace()
            }
        }
    }
  • TO-BE
  • intervalExecutor?.scheduleAtFixedRate(
        updateSeekBarPositionRunnable,
        0L /*initialDelay*/,
        REFRESH_INTERVAL_MS,
        TimeUnit.MILLISECONDS
    )

    Step3. テストコードの作成


    再パッケージ後のテストコードとデバッグログの設定
  • AS-IS
  • @Test
    fun setMedia_success() {
        Whitebox.setInternalState(
            audioPlayerController, 
            "player", 
            mockMediaPlayer
        )
        doReturn(false).whenever(mockMediaPlayer).isPlaying
     
        audioPlayerController.play()
     
        verify(mockNotificationService, times(1)).onStateChanged(
            MediaAction.MEDIA_PLAY,
            isChangedMediaByButton = false
        )
        verify(mockPlayEndViewActivity, times(1)).onStateChanged(
            MediaAction.MEDIA_PLAY,
            isChangedMediaByButton = false
        )
    }
  • Result
  • に感銘を与える


    テストコードは本当に何度も挿入されました

    慣れない不便で挫折する