Как называется антипаттерн?

agaaaa

Когда в класс кладут метоты типа LoadFromLegacy, LoadFromRefreshed, LoadFromEdge, где Legacy, Refreshed и Edge - это разные типы окружения. Вместо того, чтобы контролировать детали загрузки через свойства объект.
Тупой пример (язык неважен):
class TextBox:
def showFromNewForm:
this.drawShadow = true
this.ActualShow

def showFromOldForm:
this.fontSize = 14
this.ActualShow

class MyNewForm inherits NewForm:
def create:
var textBox = new TextBox
textBox.showFromNewForm

luna89

А что тебе не нравится в коде?

agaaaa

То, что контролу должно быть всё равно откуда его вызывают. Представь, что контрол у тебя в библиотеке и все эти методы - публичные. И вот на каждое окружение заводится по одному методу loadFromXXX, хотя нюансы подобные нюансы должны быть частью окружения, а не контрола.
Чтобы оценить абсудность, представь, что у тебя десять форм с разными размерами шрифтов, контрол в отдельной библиотеке лежит, на которую все эти формы ссылаются, и в контроле на каждую форму по одному методу.
А с учётом необходимости покрытия юнит-тестами всего публичного интерфейса это вообще в жуть превращается.

Serab

Как называется антипаттерн?
просто "хуево написано".

PooH

чувствую, не хватает фабрики фабрик текстбоксов

agaaaa

просто "хуево написано".
Проблема в том, что человеку не понятно "хуёво написано". Нужна отсылка к классикам.

PooH

Нужна отсылка к классикам.
регистрируй его на флокале!

Maurog

можно начать с этого: http://en.wikipedia.org/wiki/God_object

agaaaa

можно начать с этого: http://en.wikipedia.org/wiki/God_object
Ну я тоже его нагуглил. Но, имхо, не совсем то.

kill-still

под солид не подходит => в мусорку.

Dasar

Это едва ли антипаттерн. Это базовая ошибка по разделению ответственности между объектами.
У всех классиков должно быть в разделе основных ошибок при объектном проектировании.
Оставить комментарий
Имя или ник:
Комментарий: