Наследование класса 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 или нет