Да, это проблема при изменении любой реализации.
Когда разработчики используют ваш тип, они будут разрабатываться на основе текущего контракта. Если обновление реализации не изменяет контракт, у вас все в порядке.
Однако, если обновление реализации действительно изменяет контракт, у вас не все в порядке.
Если ваш контракт на равенство в настоящее время:
"Два объекта равны, если они имеют одно и то же имя"
Два объектадолжно всегда быть равным, если они имеют одинаковые имена, поскольку разработчики будут разрабатывать на основе этого.
Если вы введете новое поле, например id
, и обновите контракт, включив в негоэто поле:
"Два объекта равны, если они имеют одно и то же имя и идентификатор"
Системы, которые ожидали равенства по имени, теперь будут ломаться, если два объекта совместно используют одно и то жеимя, но имеют разные идентификаторы.
Это не вина этого разработчика. В вашем контракте указано, что равенство определяется именами. Их кодекс соблюдал это. Обновив контракт, вы потенциально можете нарушить их код.
Если в вашем контракте указано:
«Два объекта равны, если все их свойства равны» *
Тогда введение нового свойства не должно нарушать работу программного обеспечения, поскольку разработчики ожидают, что любые новые свойства будут учитываться реализацией, и будут разрабатывать свои системы с учетом этого.