Closed amay077 closed 6 years ago
ブログを書いていたら、StaffDataRepository に2つの問題があるコードを見つけたので報告しておきます。 アプリの動作には問題となって表れない issue です。
StaffDataRepository
loadStaff()
staff
loadStaff() で検索処理が実行され、staff as Flowable を通じて結果が通じると期待しましたが、loadStaff() を呼ばずに staff プロパティを取得するだけで検索処理が実行されてしまいます。 なので、スタッフ画面の起動時に、スタッフ検索処理(getStaff())が2回実行されていました。
getStaff()
Flowable
staff の getter や、 loadStaff() を呼ぶ度に Flowable インスタンスが再生成されています。 このため、 StaffViewModel 側の受信処理で
StaffViewModel
val staff: LiveData<Result<List<Staff>>> by lazy { repository.staff .toResult(schedulerProvider) .toLiveData() }
と定義しても、その時の repository.staff は次回の loadStaff() 呼び出しで使われなくなってしまうので、結果として、loadStaff() を2度目以降の呼び出しには StaffViewModel.staff は無反応になります。アプリのスタッフ画面は loadStaff() が意図して複数回呼び出されるケースがないので、こちらも顕在化しません。
repository.staff
StaffViewModel.staff
👀
Thanks! I didnt notice it🙏 LGTM
Overview (Required)
ブログを書いていたら、
StaffDataRepository
に2つの問題があるコードを見つけたので報告しておきます。 アプリの動作には問題となって表れない issue です。1.
loadStaff()
を呼ばなくてもstaff
の getter で検索処理が実行されるloadStaff()
で検索処理が実行され、staff as Flowable を通じて結果が通じると期待しましたが、loadStaff() を呼ばずに staff プロパティを取得するだけで検索処理が実行されてしまいます。 なので、スタッフ画面の起動時に、スタッフ検索処理(getStaff()
)が2回実行されていました。2. staff プロパティは get する度に新しい
Flowable
のインスタンスを生成してしまうstaff
の getter や、loadStaff()
を呼ぶ度に Flowable インスタンスが再生成されています。 このため、StaffViewModel
側の受信処理でと定義しても、その時の
repository.staff
は次回のloadStaff()
呼び出しで使われなくなってしまうので、結果として、loadStaff()
を2度目以降の呼び出しにはStaffViewModel.staff
は無反応になります。アプリのスタッフ画面はloadStaff()
が意図して複数回呼び出されるケースがないので、こちらも顕在化しません。