2015-01-07 8 views
0

У меня есть хорошая настройка MVC, которая будет работать с моим последним проектом, который скоро расширится, если понадобится больше людей, работающих над созданным мной кодом. Мой проект в Swift.Чтобы инкапсулировать или не инкапсулировать

Как таковой, мне любопытно, что люди, которые работали над крупномасштабными проектами, являются самым чистым подходом к инкапсуляции объектов в данном сценарии.

  1. У меня есть пользовательский класс изображения: MyImage
  2. У меня есть специальные предметы, которые держат объект MyImage, а также различные другие биты данных. Давайте назовем его DataObject.

Мой вопрос касается гнездования. Лучше ли DataObject инкапсулировать все функции MyImage со своими собственными функциями.

DataObject.doSomething() 

Или лучше практика (особенно при работе с другими), чтобы оставить все эти функции MyImage на объекте MyImage и просто сделать объект MyImage доступный из DataObject:

DataObject.myImage.doSomething() 
+1

Привет снова. :) Сначала я спрошу, почему у вас есть собственный класс изображений. Вы действительно подклассифицировали UIImage? Это очень странная вещь. Зачем ты это сделал? – matt

+0

Я думал о том же, что сказал Мэтт. Возможно, было бы полезно увидеть некоторый код, чтобы лучше понять контекст. – picciano

+0

Я не подклассифицировал UIImage, я сделал супер класс с ним. Таким образом, это UIView с UIScrollView, UImageView и множеством других вещей (например, жестов), что позволяет мне делать много веселых вещей легко. Как масштабирование, панорамирование, вращение и т. Д. И т. Д. – Aggressor

ответ

0

Это зависит как вы хотите, чтобы люди использовали ваше программное обеспечение. Нужны ли они знания MyImage? Если нет, все функции MyImage должны быть инкапсулированы в пределах DataObject, чтобы они не знали, что делает с ним DataObject. Создание MyImage доступным является, по-моему, разрушением инкапсуляции, потому что оно дает пользователю слишком большую видимость в том, что происходит за кулисами DataObject.

+0

Но тогда моя мысль такова. В конечном итоге нам понадобится сказать: DataObject2, DataObject3 и т. Д., Которые все разные. У некоторых может быть или не быть MyImage, поэтому я чувствую, что буду делать много избыточной работы, постоянно накладывая функции обертки, не так ли? – Aggressor

+0

Итак, почему бы MyImage не быть отдельным объектом, полностью управляемым пользователем, а затем иметь функцию DataObject.setMyImage (MyImage)? –

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