Prośba o ocenę kodu pod względem zasad SOLID i Clean Code

0

Witam, przywróciłem sobie wiedzę z tematów czystego czytelnego kodu, no i wszystko fajnie ale nie wiem czy ja to dobrze stosuję, bo np. moja metoda onCreate() nie jest Single-Responsiblity i nie wiem jak to się tyczy do takich komunikacji między GUI a kodem. Mógłby ktoś kto się zna rzucić okiem? Pozdrawiam


public class AllBooksActivity extends AppCompatActivity {

        private androidx.appcompat.widget.Toolbar tool_bar;
        private ViewPager view_pager;
        private TabLayout tab_layout;

        private SectionsPagerAdapter sectionsPagerAdapter;
        private BooksRecViewAdapter recViewAdapter;
        private BooksTabFragment allBooksFragment, wantToReadBooksFragment,
                currReadingBooksFragment, alreadyReadBooksFragment;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_all_books);
            initWidgets();
            initTabFragments();
            initVariables();
            setUpViewPager(view_pager);
            tab_layout.setupWithViewPager(view_pager);

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.main_menu, menu);

            MenuItem searchItem = menu.findItem(R.id.action_search);
            SearchView searchView = (SearchView) searchItem.getActionView();

            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String s) {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String s) {
                    recViewAdapter.getFilter().filter(s);
                    return false;
                }
            });
            return true;
        }

        private void initWidgets() {
            view_pager = (ViewPager) findViewById(R.id.view_pager);
            tab_layout = (TabLayout) findViewById(R.id.tab_layout);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                tool_bar = (Toolbar) findViewById(R.id.tool_bar);
                setSupportActionBar(tool_bar);
            }
        }

        private void initTabFragments() {
            allBooksFragment = new BooksTabFragment(this, Status.NEUTRAL);
            wantToReadBooksFragment = new BooksTabFragment(this, Status.WANT_TO_READ);
            currReadingBooksFragment = new BooksTabFragment(this, Status.CURRENTLY_READING);
            alreadyReadBooksFragment = new BooksTabFragment(this, Status.ALREADY_READ);
        }

        private void initVariables() {
            sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
            recViewAdapter = allBooksFragment.getAdapter();
        }

        private void setUpViewPager(ViewPager viewPager) {
            sectionsPagerAdapter.addFragment(allBooksFragment, "All books");
            sectionsPagerAdapter.addFragment(wantToReadBooksFragment, "Want to read books");
            sectionsPagerAdapter.addFragment(currReadingBooksFragment, "Currently reading books");
            sectionsPagerAdapter.addFragment(alreadyReadBooksFragment, "Already read books");
            viewPager.setAdapter(sectionsPagerAdapter);
            view_pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }

                @Override
                public void onPageSelected(int position) {
                    switch (view_pager.getCurrentItem()) {
                        case 0: {
                            recViewAdapter = allBooksFragment.getAdapter();
                            break;
                        }
                        case 1: {
                            recViewAdapter = wantToReadBooksFragment.getAdapter();
                            break;
                        }
                        case 2: {
                            recViewAdapter = currReadingBooksFragment.getAdapter();
                            break;
                        }
                        case 3: {
                            recViewAdapter = alreadyReadBooksFragment.getAdapter();
                            break;
                        }
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });
        }
}
0

Skąd czerpiesz wiedzę na temat "Clean Code"?

2

Nie znam się na android, ale Ci pomogę bo dziś za bardzo nie mogę się skupić.

AppCompatActivity to klasa widok (z MVC), która z punktu widzenia dokumentacji wiele robi. Skoro po niej dziedziczysz i rozszerzasz to za bardzo nie da się tego sprowadzić do pojedynczej odpowiedzialności. Ja bym raczej dążył do tego w kodzie, by być jak najmniej zależnym od tego typu klas. Np nie pakuj tutaj logiki wprost np. obsługę związaną fragmentami przenieś do innej klasy tak jak tutaj na blogu https://medium.com/@kyroschow/how-to-use-viewpager-for-navigating-between-fragments-with-tablayout-a28b4cf92c42

1 użytkowników online, w tym zalogowanych: 0, gości: 1