хороший рефакторинг или плохой? - PullRequest
0 голосов
/ 28 октября 2010

Учитывая следующий код:

    status = row[COL_STATUS]

    if status == "idle":
        row[COL_EDITABLE] = True
        row[COL_FONTSTYLE] = pango.STYLE_NORMAL
        row[COL_WEIGHT] = pango.WEIGHT_NORMAL
    elif status == "DCed":
        row[COL_EDITABLE] = True
        row[COL_FONTSTYLE] = pango.STYLE_ITALIC
        row[COL_WEIGHT] = pango.WEIGHT_NORMAL
    else:
        row[COL_EDITABLE] = False
        row[COL_FONTSTYLE] = pango.STYLE_NORMAL
        row[COL_WEIGHT] = pango.WEIGHT_BOLD

Будет ли, по вашему мнению, чистым благотворным рефакторингом?

    d = {"idle": (True,  pango.STYLE_NORMAL, pango.WEIGHT_NORMAL),
         "DCed": (True,  pango.STYLE_ITALIC, pango.WEIGHT_NORMAL),
         None:   (False, pango.STYLE_NORMAL, pango.WEIGHT_BOLD)}
    e,f,w = d.get(status, d[None])
    row[COL_EDITABLE] = e
    row[COL_FONTSTYLE] = f
    row[COL_WEIGHT] = w

Что если было бы больше случаев или больше компонентов строки вредактировать?

Ответы [ 2 ]

4 голосов
/ 28 октября 2010

Как насчет использования объектов и выполнения действий, аналогичных «Заменить код типа на подклассы»?http://www.refactoring.com/catalog/replaceTypeCodeWithSubclasses.html

3 голосов
/ 28 октября 2010

То, что вы получаете в краткости, вы теряете в удобочитаемости.В текущем примере я легко могу сказать, что и куда идет.В новом коде мне нужно подумать немного сложнее.

Умножьте это на следующие тысячи правок, и у вас будут серьезные проблемы с ремонтопригодностью.

...