This article is a good reference from the "clean code!
Input a Boolean parameter to the method to determine the logic and execute it separately. Disadvantages:
- Method signature becomes complicated immediately.
- This method does more than one thing.
Instance:
/** * @param isChecked */ protected void setAllDayViewsVisibility(boolean isChecked) { if (isChecked) { if (mEndTime.hour == 0 && mEndTime.minute == 0) { mEndTime.monthDay--; long endMillis = mEndTime.normalize(true); // Do not allow an event to have an end time // before the // start time. if (mEndTime.before(mStartTime)) { mEndTime.set(mStartTime); endMillis = mEndTime.normalize(true); } setDate(mEndDateButton, endMillis); setTime(mEndTimeButton, endMillis); } mStartTimeButton.setVisibility(View.GONE); mEndTimeButton.setVisibility(View.GONE); mTimezoneRow.setVisibility(View.GONE); } else { if (mEndTime.hour == 0 && mEndTime.minute == 0) { mEndTime.monthDay++; long endMillis = mEndTime.normalize(true); setDate(mEndDateButton, endMillis); setTime(mEndTimeButton, endMillis); } mStartTimeButton.setVisibility(View.VISIBLE); mEndTimeButton.setVisibility(View.VISIBLE); mTimezoneRow.setVisibility(View.VISIBLE); } updateHomeTime(); }
After reconstruction, it becomes two methods.
protected void setAllDayViewsGone() {if (mEndTime.hour == 0 && mEndTime.minute == 0) {mEndTime.monthDay--;long endMillis = mEndTime.normalize(true);// Do not allow an event to have an end time// before the// start time.if (mEndTime.before(mStartTime)) {mEndTime.set(mStartTime);endMillis = mEndTime.normalize(true);}setDate(mEndDateButton, endMillis);setTime(mEndTimeButton, endMillis);}mStartTimeButton.setVisibility(View.GONE);mEndTimeButton.setVisibility(View.GONE);mTimezoneRow.setVisibility(View.GONE);updateHomeTime();}protected void setAllDayViewsVisible() {if (mEndTime.hour == 0 && mEndTime.minute == 0) {mEndTime.monthDay++;long endMillis = mEndTime.normalize(true);setDate(mEndDateButton, endMillis);setTime(mEndTimeButton, endMillis);}mStartTimeButton.setVisibility(View.VISIBLE);mEndTimeButton.setVisibility(View.VISIBLE);mTimezoneRow.setVisibility(View.VISIBLE);updateHomeTime();}