Допустим, у меня есть объект, Car, и у него есть наборы методов, которые ... несопоставимы?Может быть, как Blob-like?(как в antipattern, «blob») Эти методы работают в достаточно четких наборах и на самом деле функционально не пересекаются.
Car
# methods related to suburban driving
->foo1
->foo2
# methods related city driving
->bar3
->bar4
Теперь давайте скажем, что я хотел добавить «движение по бездорожью» как единое целоеслучаев, которые может поддержать мой автомобильный объект.Если я добавлю методы к объекту Car, разве это не сделает его более похожим на шарик?
Car (augmented)
# methods related to suburban driving
->foo1
->foo2
# methods related city driving
->bar3
->bar4
# methods related off road driving
->blah5
->blah6
Должен ли я:
A: Подкласс Car .Я могу сделать OffRoadCar расширяет объект Car.Но что, если Car и OffRoadCar совместно используют одни и те же данные / состояние и различаются только методами?OffRoadCar только «действует» более конкретно, чем автомобиль, но не описывается более конкретно и не имеет уникальных полей.Таким образом, создание OffRoadCar не имеет смысла.
OffRoadCar extends Car
# methods related off road driving
->blah5
->blah6
B: Использовать автомобиль статическим методом .Нравится OffRoadAdventure-> Embark (Автомобиль).Таким образом, класс OffRoadAdventure принимает объект Car и имеет свой путь к нему.
В C # это будет называться методом расширения.
Я полагаю, если поставить другой путь, это , каково решениек Blob антипаттерну ?Это подкласс?Это методы расширения?
Кроме того, еще одна причина, по которой я хотел использовать эти методы, заключается в том, что если их реализация требует определенных затрат, например, включение других классов / пакетов?Я бы не хотел, чтобы пользователи основного класса постоянно платили за то, что они никогда не будут использовать.Я полагаю, что явная стоимость для меньшинства стоит экономии для большинства.И это делает граф зависимостей более точным (и не похожим на блоб).
PS - язык реализации - Perl.