- 0
Код типа "лапша"
Здравствуйте. Мой вопрос, возможно, покажется странным, но нигде не могу найти толкового объяснения, что такое "лапша-код". Если кто знает, объясните, пожалуйста.
2 ответа:
-
- 2
Вики-ответИ правильно, что не находите. Потому что нет такого понятия - код типа лапша. Есть спагетти код. А это уж отыщется любым гуглом. Например:
-
- 0
Лапша-код, на мой взгляд, чуть более узко можно определить через нарушение Принципа Минимального Знания
Приминительно к ООД это можно выразить, наверное, так: Нельзя напрямую тянуться к ресурсам одного объекта, если он получен через другой.
т.е. вот такой код - лапша:
some_instance.some_property.doSomething()Этот код подразумевает что в контексте выполнения известно что класс someproperty имплементирует метод doSomething(), а это, в дополнение к явной зависимости от класса someinstance вводит неявную зависимость класса some_property, а он может, например, оказаться в другом пакете.
Вместо такого в someinstance как минимум должен в явном виде присутствовать соответствующий делегат типа doSomethingWithSomeProperty(), или же более существенная часть кода перенесена в методы someinstance.
т.е. это нормально вызывать методы класса, нормально вызывать методы собственных свойств, но уже опасно вызывать, допустим, методы свойств своих свойств.
Нарушения этого принципа характерны длииинными цепочками вызовов в стиле obj->call1()->call2()->call3(), которые, собаки, длинный как лапша.
Принцип, как и большинство основных принципов ООД невозможно удовлетворить на 100% и при этом не начать заниматься абстрактным программированием в вакууме, но оглядываться на него всегда нужно, т.к. длинный лапша-код опасен очень неприятными и непредвиденными поломками из-за длинных и незаметных на первый взгляд зависимостей от, казалось бы совершенно левых интерфейсов в совершенно левых местах.