Как я могу реорганизовать этот метод, чтобы уменьшить его когнитивную сложность с 21 до 15 разрешенных? - PullRequest
0 голосов
/ 05 февраля 2020
/** @param  e */
    private void doActionForUldProfileRecordGrid(ListSelectionEvent e)
    {
        Object source = e.getSource();
        if ((uldProfileTab.getRecordsGrid() != null) && (source == uldProfileTab.getRecordsGrid().getSelectionModel()))
        {
            try
            {
                if (uldProfileTab.getRecordsGrid() != null)
                {
                    UldProfileRec data = (UldProfileRec) getDataVector().elementAt(uldProfileTab.getRecordsGrid()
                            .getActiveRow());

                    if ((data != null) && Str.isNotEmpty(data.contourGroup))
                    {
                        ContourGroup contourGroup = ContourGroupServiceCallUtil.getContourGroup(data.contourGroup);

                        if ((uldProfileTab.getRecordsGrid().getActiveRow()
                                == (uldProfileTab.getRecordsGrid().getRowCount() - 1)))
                        {
                            data = new UldProfileRec();
                            getDataVector().addElement(data);
                        }

                        if (contourGroup != null)
                        {
                            data.setBaseWeight(contourGroup.defaultWeight());
                            data.setBaseVolume(contourGroup.defaultVolume());
                            data.deck(contourGroup.getDeckDescription());
                        }
                    }

                    if (data != null)
                    {
                        setWeightVolume(data, data.position());
                    }
                }
            }
            catch (VerifyException ve)
            {
                LOGGER.warn(ve.getLocalizedMessage(), ve);
            }
        } // end if
    }

1 Ответ

2 голосов
/ 05 февраля 2020

Вы должны реорганизовать свой код и выделить отдельные логики c в отдельные меньшие методы, это поможет вам в двух направлениях:

  1. Это сделает код более модульным и обслуживаемым.
  2. Меньшие методы легче тестировать и снижают вероятность появления ошибок в будущем.

И, как побочный продукт, когнитивная сложность методов также уменьшится.

Например:

Из этого метода:

private void doActionForUldProfileRecordGrid(ListSelectionEvent e)
    {
        Object source = e.getSource();
        if ((uldProfileTab.getRecordsGrid() != null) && (source == uldProfileTab.getRecordsGrid().getSelectionModel()))
        {
            try
            {
                if (uldProfileTab.getRecordsGrid() != null)
                {
                    UldProfileRec data = (UldProfileRec) getDataVector().elementAt(uldProfileTab.getRecordsGrid()
                            .getActiveRow());

                    if ((data != null) && Str.isNotEmpty(data.contourGroup))
                    {
                        **ContourGroup contourGroup = ContourGroupServiceCallUtil.getContourGroup(data.contourGroup);

                        if ((uldProfileTab.getRecordsGrid().getActiveRow()
                                == (uldProfileTab.getRecordsGrid().getRowCount() - 1)))
                        {
                            data = new UldProfileRec();
                            getDataVector().addElement(data);
                        }

                        if (contourGroup != null)
                        {
                            data.setBaseWeight(contourGroup.defaultWeight());
                            data.setBaseVolume(contourGroup.defaultVolume());
                            data.deck(contourGroup.getDeckDescription());
                        }**
                    }

                    if (data != null)
                    {
                        setWeightVolume(data, data.position());
                    }
                }
            }
            catch (VerifyException ve)
            {
                LOGGER.warn(ve.getLocalizedMessage(), ve);
            }
        } // end if

Вы можете выполнить рефакторинг выделенной части, можете переместить ее в отдельный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...