Наследование класса Objective-C

Я хотел бы спросить о проблеме, с которой я сталкиваюсь: у меня есть два класса, Photo и RemotePhoto, которые представляют фотографию, снятую с помощью камеры телефона, и загруженную фотографию. RemotePhoto наследует от Photo, потому что ему нужно переопределить ту же логику.

Я сохраняю информацию о обоих типах фотографий в БД, в таблице с именем Photo, потому что они разделяют одни и те же детали, и использовал столбец в качестве флага, чтобы различать их. Я использую DAO, чтобы получить информацию о фотографии из БД.

Вопрос в том:

Как я могу управлять тем фактом, что, если строка ссылается на локальную фотографию, должна быть сопоставлена ​​с классом Photo и в противном случае использовать RemotePhoto? Я думал о том, чтобы сделать такое различие в реализации DAO, но я хотел бы знать, есть ли какие-то недостатки. Мне также хотелось бы знать, возможно ли использовать какую-то функцию ObjectiveC для элегантного выполнения этой задачи (так что, может быть, я смогу узнать что-то новое;).

Наконец, меня также интересует другое предложение по организации БД, если кто-то сталкивался с подобной проблемой: до сих пор мне не приходилось сохранять информацию об удаленных фотографиях в БД, поэтому я успел обновить схему БД:)!

2 ответа

Решение

Рассматривали ли вы использование протокола вместо наследования. Если ваш класс RemotePhoto должен переопределить имя входа в вашем классе Photo, то наследование, вероятно, не лучшее решение:)

Сделайте два занятия: LocalPhoto а также RemotePhoto что оба являются подклассами NSObject и реализовать Photo протокол. Есть метод (или PhotoFactory, если вы чувствуете себя модно), который возьмет ваш DAO и вернет id <Photo>, Остальной части вашего приложения не нужно заботиться о том, будет ли это локальная или удаленная фотография.

Если ваши классы являются объектами NSObjects, вы можете использовать isKindOfClass(RemotePhoto), чтобы определить, является ли объект RemotePhoto или нет

Другие вопросы по тегам