2016-06-21 4 views
1

Предположим, у меня есть класс ChatDataProvider, который общается с сервером и содержит список объектов типа Чат (содержащий объекты типа Post и т. Д.). Если я хочу, чтобы трансферт это чатов в другой класс (для того, чтобы показать их), у меня есть несколько возможностей:Использовать одинаковые данные во всем приложении или скопировать его?

  1. Отправить ссылку на объект List
  2. «Shallow» копировать данные: Создать новый список, который содержит ссылки на исходные объекты
  3. Deep копировать данные

Я догадываюсь 1. & 2. будет рассматриваться как плохой дизайн, так как данные не инкапсулируются. Но он также имеет преимущество:

  • непротиворечивости данных (если, например, упорядочение записей изменений, я либо должен распространяться это изменения в глубокой скопирована версию и применить тот же порядок там, или я бы нужно получить новую глубокую копию этого списка)

  • уменьшено использование памяти

Keepting данные, соответствующие всему приложению создает большие накладные расходы реализации, которые склонны к ошибкам. И поскольку это приложение, закрытое приложение, не произойдет никаких «несанкционированных» изменений в данных, которые не должны распространяться (автоматически).

Итак, какой из них вы бы выбрали и почему? Имеются ли оба варианта?

Возможно, есть ответы на этот вопрос, но я действительно не знаю, что искать. Поэтому, если кто-то знает некоторые ссылки/ресурсы, все в порядке.

ответ

1

Все это сужается до дизайна используемого вами проекта.

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

2) Если вы выполняете операции на одном и том же объекте одновременно, он подвержен ошибкам, и это также не очень хороший дизайн.

Итак, перейдите для мелкой копии/ссылки, если вам просто нужно получить доступ к объекту или для глубокой копии, если вы выполняете какие-либо операции одновременно !!!

 Смежные вопросы

  • Нет связанных вопросов^_^