Довольно часто я вижу код, который использует избыточные свойства для данных, когда одно значение можно было вычислить на лету из двух других. Для меня это очевидный анти-паттерн, поскольку он значительно усложняет дальнейшую работу над кодом. Каждый раз, когда вы меняете одно значение, вы должны знать, как оно соотносится с другими значениями, а также изменять их. Если вы все испортите, возникает двусмысленная ситуация, когда вы не знаете, какие значения правильные, а какие нет.
Однако я не знаю, является ли это «известным» анти-паттерном с установленным именем.
# Bad
class Rectangle
attr_accessor: height
attr_accessor: width
attr_accessor: ratio
def initialize
@height = 1
@width = 1
@ratio = 1
end
end
# Good
class Rectangle
attr_accessor: height
attr_accessor: width
def initialize
@height = 1
@width = 1
end
def ratio
@width.to_f / @height
end
end