Функция импорта, добавленная в мою программу, нарушает инкапсуляцию ООП. Как восстановить инкапсуляцию? - PullRequest
1 голос
/ 31 января 2011

У меня есть программа, которая хранит эту информацию в файле XML.Этот файл считывается и создается соответствующая объектная модель.Объектная модель имеет древовидную иерархию.Тип объекта мы назовем BigHierarchy.

Теперь в моей программе есть функция, позволяющая пользователю импортировать другой файл.Поэтому, когда он выбирает файл, который он хочет импортировать, я читаю в этом файле и создаю другой объект типа BigHierarchy для представления файла импорта.Так что теперь у меня есть оригинальный объект BigHierarchy и новый, который мне нужно объединить.Поскольку это иерархия, некоторые данные являются частными и недоступными.

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

1 Ответ

0 голосов
/ 31 января 2011

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

  1. Перезаписать с последней
  2. Сохранить оригинал
  3. Объединить изменения

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

Если вы выберете подход 2, то вы вообще не будете прикасаться к личным членам.

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

Надеюсь, это поможет.

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