2016-09-08 20 views
1

現在、私のコードをリファクタリングしてブロックされています。私はswitchステートメントをリファクタリングできることを知っていますが、私はそうする経験が不足しています:(パターンの大部分とスイッチを扱う方法の大部分は、メソッドの異なるパラメータの管理に焦点が当てられています。私はそれについて何ができるかのアイデアは?本当に任意のヒントをお願い申し上げます。パラメータを持たないメソッドを含むリファクタリングswitch文

public void manageMenuAction(MenuItem item, GiftListPresenterViewConnector activityConnector) { 
    switch (item.getItemId()) { 
     case R.id.nav_your_account: 
      activityConnector.goToEditAccount(); 
      break; 
     case R.id.help: 
      activityConnector.goToHelpScreen(); 
      break; 
     case R.id.nav_about: 
      createInfoDialog(); 
      break; 
     case R.id.nav_exit: 
      activityConnector.exitApp(); 
      break; 
     case R.id.nav_logout: 
      clearLocalData(); 
      activityConnector.logout(); 
      break; 
    } 
} 

を私はjavaの1.7での作業、アンドロイドをコードしています。GiftListPresenterViewConnectorがインタフェースである。

+3

これは完全に有効な 'switch'ステートメントのようです。なぜそれをリファクタリングしたいのですか? –

+0

メソッドをどのように呼びますか? –

+1

これは事を行う最も簡単な方法です。なぜそれを変更したいのですか? –

答えて

1

を理論的に、あなたはジェネリックを実装できますMenuItem.idの動作でMenuItemがこの汎用インスタンスを保持し、manageMenuActionに入るとMenuItem.getItemId().executeBehavior()

(あなたはまた、代わりにidの一般的なインスタンスを保持するのジェネリックMenuItemを作ることができる)

このidはおそらく単純なIntegerで、スイッチケースはおそらくだろうので、正直なところ、私はそれをしないだろうそれを行う最も単純な方法

+1

ええ、tbh私はネイティブのアンドロイドメソッドを掘り起こすのに十分な強さを感じていません:D – Kamajabu

+0

hehe私はあなたが何をすることを決心したか教えてください:) –

0

私に際立っている項目は、activityConnectorを通過しない唯一のパスだからcreateInfoDialogです。 GiftListPresenterViewConnectorのメソッドを作成する場合は、このメソッド全体をそのクラスに移動することができ、それを引数として取る必要はありません。しかし私は他のコメント作成者に同意します。このメソッドは正常に見えます。

+1

ええ、私はcreateInfoDialogを移動することも、しかし、私のアクティビティで実装されているインタフェースであるGiftListPresenterViewConnectorへのswitch文全体の移動はオプションではなく、プレゼンタ(MVPの主な目的はビューからそのロジックを抽出することです)にあります: – Kamajabu

0

もう1つの選択肢として、地図を使用することができます。

  1. キー

が次にあなたが

callbacks.get(item.getItemId()).doCallback(); 

のようなコードを書くことができ、いくつかの一般的なコールバックオブジェクトになり、あなたのアイテムIDになるしかし、それもそうですビット "far-fetched";おそらくあまり多くの "アンドロイド様式"ではありません。

1

'command'デザインパターンの使用を検討してくださいhttps://en.wikipedia.org/wiki/Command_pattern

+0

1つのswitch文を取り除くために5つのクラスを追加する必要がありますか? – Kamajabu

+0

@ Reiz3Nおそらくそれはありますが、思うかもしれないほど痛いかもしれません。 –

+0

メニューからだけでなく、他の場所からも何らかのアクションを実行できるということです。mvpを使用しているので、ビュー内にないui固有のid定数を使用しないでください。 –

関連する問題