коллекции внутри или снаружи основного метода - PullRequest
1 голос
/ 11 октября 2011

Мне интересны мнения по дизайну.

Существует как минимум два способа найти коллекцию часто используемых данных. Вне основного метода все методы могли обращаться к одной и той же коллекции и изменять ее данные. Или 2, внутри main, где я могу сделать столько коллекций, сколько мне нужно, и передать их в виде аргумента функциям, объектам или методам.

Что лучше? Мое мышление подсказывает мне, что 2 приводит к коду, который легче использовать и лучше инкапсулировать данные. Но я вижу много примеров 1, которые говорят мне, что 1 может быть лучше. Но почему?

Ответы [ 4 ]

2 голосов
/ 11 октября 2011

Полностью зависит от использования.Инкапсулированный класс вполне может иметь список как состояние экземпляра.Иногда это совершенно неуместно и имеет смысл передавать / возвращать состояние.

Нет «лучше», только «уместно».

Удалено из ответа на комментарий

Что имеет смысл, зависит от контекста.У классов есть свойства - список является совершенно допустимым свойством.В конце концов, если бы у вас был класс «Person», вы бы не передавали атрибут «name»;это свойство.

Если вы обнаружите, что что-то передается внутренне "партией", возможно, вместо этого это свойство, или другой класс, или ... Наоборот, если оно слабо связано с классом, а нечасть его внутреннего представления, возможно, имеет смысл иметь список только в качестве локального и / или параметра.

Иногда это также вопрос эстетики или удобства.

1 голос
/ 11 октября 2011

Вы хотите оказаться в положении, когда вы повторно посещаете код и точно знаете, что должна делать каждая часть, и что именно делает .

Для этого очевидное (и наиболее часто используемое в правильной разработке программного обеспечения) больше похоже на второе.

Попробуйте создать четкое разделение. Задайте себе такие вопросы, как:

  • Нужно ли этой функции знать об этой коллекции, чтобы она работала правильно?
  • Можно ли думать по-другому, чтобы разделить обязанности в этом кодексе?
  • Или более общий: Какие у меня есть другие варианты, и я немного подумал о последствиях, которые каждый из них логически влечет за собой?
1 голос
/ 11 октября 2011

Большинство разработчиков работают над уровнем - фокусируясь на взаимодействиях между классами, а не внутри них. Теоретически вы правы, но на практике это, как правило, не очень важно - понимание использования частной коллекции класса обычно очень просто - большинство IDE даже выделяют все случаи использования, если вы просто выбираете любое вхождение имени. Из-за помощи IDE становится сложнее следить за потоком данных в коде, написанном в вашем стиле. Ваши инстинкты правы, хотя, думая об межклассовом использовании.

Случай, в котором требуется ваша модель, - это когда класс должен быть без состояний, особенно когда его экземпляр вызывается несколькими потоками одновременно. В этом случае любые данные для каждого потока, как правило, не могут быть сохранены на уровне класса, и должен передаваться между функциями.

1 голос
/ 11 октября 2011

Как правило, поля не должны быть доступны вне класса, в котором они объявлены.Если вы видите примеры коллекций как поля в классе Main, к которым обращаются другие классы, это, вероятно, не очень хороший дизайн.Если к коллекциям обращаются только методы в классе, это нормально.Если другие классы нуждаются в доступе к коллекциям, им должен быть передан некоторый механизм для получения коллекции (либо передать коллекцию, либо передать объект, имеющий геттер).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...