Я действительно не вижу нарушения здесь.
Закон Деметры, в концепции, предполагает, что субъект знает только своих соседей, а не чужими, так что если A
нужно что-то из C
, он должен поговорить с B
, чтобы получить его и не идти дальше.
Я бы не назвал List
«соседом», чтобы применить эту концепцию. Это объект, который управляет структурой данных, которую вы можете использовать в своей программе. Поэтому Object
, который будет содержать ваш список, будет считаться B
вашим A
.
Если List
был фактическим субъектом, определенным в вашей программе, в этом случае вы можете быть правы. Было бы разумнее, если бы у вашего List
был метод, который требует, чтобы ваш Object
выполнял некоторую логику (как вы сказали в комментарии, list.callSomethingOn(i)
).
Если этот конкретный экземпляр List
занимает центральное место в логику вашей программы, и вы непреклонны об удовлетворении права, вы можете использовать «Декоратор» для List
, который добавляет дополнительные методы для работы с содержали Object
s
Не могли бы вы объяснить, как вы видите нарушение закона Деметры? – Matthew
Возможно, расскажите больше о том, что вы хотите сделать? Я не вижу здесь проблемы, это не похоже на то, что вы вызываете 10 геттеров подряд. – Tunaki
Я понимаю, что это не огромное нарушение, но оно все еще похоже на запах кода. Это нарушение LoD, потому что я извлекаю объект из ArrayList и затем вызываю метод на извлеченном объекте. Технически я должен сделать что-то вроде list.callSomethingOn (i), чтобы сохранить Закон Деметры, но это также кажется неправильным – kabeersvohra