Должны ли я иметь две разные переменные в одном классе, которые представляют почти одно и то же - PullRequest
0 голосов
/ 26 октября 2011

Сначала у меня был класс A, который принимал список B в качестве аргумента конструктора. Этот список B хранился в классе A в переменной. Другой класс, который использовал этот класс A, нуждался в данных в списке B, но другим способом. Поэтому я создал конкретный объект C и имел метод getSomething () в классе A, который на лету создал один из этих объектов C, основываясь на информации в исходном списке B. Это прекрасно работало.

Затем оказалось, что классу, который вызвал getSomething (), нужна немного дополнительная информация, которую не содержал исходный список B. Небольшой расчет по конкретным элементам в списке B, однако, дал мне эту информацию. Эта информация должна быть добавлена ​​к объекту C. Этот расчет немного сложен, поэтому я не хочу делать это на лету, когда я создаю объект C в getSomething (). Это вызвало у меня проблему, поскольку я не могу обновить какие-либо элементы объекта C с помощью этой вычисленной информации, поскольку элементы объекта C еще не существуют, они создаются в getSomething ().

Как мне решить это наилучшим образом. Возможно, есть какие-то шаблоны?

  • Должен ли я в конструкторе класса A преобразовывать элементы в списке B в список объекта C, а затем отбрасывать список B, а затем выполнять вычисления и обновлять все элементы объекта C?

  • Сохраняю ли я исходный список B и список объекта C и имею ли две переменные с почти одинаковой информацией, просто представленные по-другому?

  • Или что-то еще?

Редактировать: C не является расширением элемента в списке B, его более чем один или несколько элементов в списке B объединены в C.

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Объяснение, вероятно, более запутанно, чем реальная проблема.

AFAICT вы хотите оформленный B, где оформленный список вычисляется в конструкторе A.

Является ли это копиями объектов B или составной ссылкой на оригиналы (или что-то еще), зависит от ваших реальных потребностей.

0 голосов
/ 26 октября 2011

Если вы можете внести коррективы в список B, чтобы создать список C, не теряя информацию, которая нужна классу A (другими словами, если класс A может нормально работать только с списком C), тогда да, вычисляя это в конструкторе и не сохраняя Bкажется хорошей идеей

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

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