как избежать хранения разных типов объектов в одном и том же месте, когда они представляют одинаковые, но с другой структурой данных - PullRequest
0 голосов
/ 14 января 2010

Это, на мой взгляд, абстрактная проблема, и я надеюсь, что смогу ее хорошо объяснить. Я случайно обнаружил такую ​​же проблему в совершенно другом проекте, и теперь у меня есть ее снова, и я хотел бы избежать ее, если это возможно.

Я создаю несколько классов, чтобы упростить некоторые задачи для некоторых конкретных требований, которые мы имеем в некоторых проектах на работе.

У меня есть класс, который создает объекты, которые отображают значения из веб-элементов управления в свойства объекта, подобные этому

http://msdn.microsoft.com/en-us/library/aa478957.aspx

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

Ответы [ 3 ]

1 голос
/ 14 января 2010

Для меня это звучит как сложный узор. Composite предоставит интерфейс для одинаковой обработки контейнеров объектов и конечных объектов (тех, которые не являются контейнерами).

1 голос
/ 14 января 2010

Это проблема полиморфизма.

"иногда мне нужно хранить не контейнерный объект в ... атрибуте объекта, а иногда мне нужно хранить контейнерный объект в том же месте"

У вас есть две вещи, которые следует сделать полиморфными.

Самый простой способ исправить это - всегда использовать контейнер. Когда вы хотите сохранить один неконтейнерный объект, вы «оборачиваете» его в контейнер, содержащий только один объект.

Тогда у вас всегда есть контейнеры. Иногда у контейнера есть один объект, иногда - более одного.

1 голос
/ 14 января 2010

Я не уверен, что понимаю ваш вопрос, но, возможно, Шаблон посетителей - это то, что вы ищете?

...