Часть 5 состоит из вопросов интервью Swift iOS и ответов о дизайне и архитектурном шаблоне. В этой статье я кратко расскажу о различных концепциях проектирования и архитектурных шаблонах, таких как MVC, MVVM, VIP, VIPER, структурный, поведенческий и творческий шаблон проектирования в iOS и т. д.
Что такое MVC и объясните основную проблему MVC?
MVC/Model-View-Controller — это архитектурный шаблон, используемый для разделения пользовательского интерфейса (представления), данных (модели) и логики приложения (контроллера). Основная проблема MVC заключается в том, что он не заставляет разработчиков разделять обязанности. Например: коды, связанные с сетью, часто можно найти в ViewController. ViewController иногда рассматривается как станция дампа для всех видов логики. По этой причине MVC часто называют массивным контроллером представления.
Роли MVC описаны здесь —
- Модель будет только инкапсулировать данные, она не должна содержать никакой бизнес-логики.
- Представление инкапсулирует то, что пользователь может видеть в пользовательском интерфейсе, и оно также не должно содержать бизнес-логики.
- Контроллер должен поддерживать все виды бизнес-логики, которая проходит между представлением и моделью.
Объясните ООП в контексте iOS-разработчика
Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая использует объекты и их взаимодействия для разработки приложений и компьютерных программ. В контексте разработки iOS ООП используется для создания структуры и функциональности приложений iOS с использованием языков программирования Objective-C или Swift. Разработчики iOS используют принципы ООП, такие как наследование, инкапсуляция и полиморфизм, для создания классов и объектов, которые взаимодействуют друг с другом для обеспечения желаемой функциональности приложения. ООП также позволяет повторно использовать код и упрощает обслуживание и обновление приложения.
Подробнее: Совершенствуйте свои навыки ООП для разработки iOS
Что такое MVVM?
MVVM/Model-View-ViewModel — это архитектурный шаблон, позволяющий отделить бизнес-логику и логику представления от пользовательского интерфейса. Создание чистого разделения поможет вам легко находить ошибки и эффективно тестировать. MVVM будет хорошим выбором, если вы хотите уменьшить размер вашего контроллера представления и сделать бизнес-логику более читаемой.
Модель представления вызывает изменения в модели и обновляет себя обновленной моделью, и, поскольку у нас есть привязка между представлением и моделью представления, первая обновляется соответствующим образом.
Как бы вы объяснили концепцию внедрения зависимостей младшему разработчику?
Внедрение зависимостей — это способ предоставить классу его зависимости вместо того, чтобы класс создавал или искал их сам. Это помогает сделать код более гибким и простым для тестирования, позволяя заменять зависимости по мере необходимости. Например, классу, выполняющему сетевые запросы, может быть предоставлен экземпляр сетевого класса, а не создавать его самому.
Можете ли вы объяснить принципы протокольно-ориентированного программирования начинающему разработчику Swift?
Протокольно-ориентированное программирование — это парадигма программирования, которая делает упор на использование протоколов, а не классов, для определения интерфейса и поведения типов. Это обеспечивает большую гибкость с точки зрения реализации и допускает полиморфизм на основе протокола. Например, протокол может быть определен для «рисуемого» объекта, и любой объект, который соответствует этому протоколу, может быть отображен на экране.
Можете ли вы описать использование Key-Value Observing (KVO) на платформах Apple?
KVO (Key-Value Observing) позволяет объектам уведомляться об изменении значения свойства. Он используется на платформах Apple, таких как iOS и macOS, для привязки данных и обнаружения изменений в данных. Например, пользовательский интерфейс приложения может быть привязан к модели данных, и при изменении свойств модели данных пользовательский интерфейс обновляется автоматически.
Можете ли вы предоставить несколько сценариев, в которых использование синглетонов было бы уместным?
Синглтоны — это шаблон проектирования, в котором экземпляр класса создается только один раз за время существования приложения. Они могут быть хорошей идеей, когда одному экземпляру необходимо управлять общими ресурсами, например общим подключением к базе данных или общей конфигурацией. Синглтоны также можно использовать для ведения журнала, а также для реализации общего кеша.
Что такое шаблон проектирования и кратко объясните некоторые часто используемые шаблоны проектирования Cocoa?
Шаблоны проектирования — это многоразовые решения общих проблем в разработке программного обеспечения. Шаблоны проектирования могут ускорить процесс разработки, предоставляя проверенные и проверенные парадигмы разработки. Эффективная разработка программного обеспечения требует рассмотрения проблем, которые могут стать видимыми лишь на более позднем этапе реализации. Повторное использование шаблонов проектирования помогает предотвратить тонкие проблемы, которые могут вызвать серьезные проблемы, и улучшает читаемость кода для программистов и архитекторов, знакомых с шаблонами.
Обычно используемые шаблоны проектирования Cocoa:
- Креативный шаблон проектирования: синглтон, фабрика
- Шаблон структурного проектирования: декоратор, адаптер, фасад
- Шаблон поведенческого проектирования: Наблюдатель, Память.
Что такое шаблон Singleton и почему нам следует избегать его чрезмерного использования?
Шаблон singleton (Creational) гарантирует, что только один экземпляр класса создается за время существования приложения. Это очень простой шаблон для реализации, но он также имеет плохую репутацию из-за неправильного использования. Синглтон убивает идею «разделения интересов», поскольку к нему можно получить доступ отовсюду (они обычно используются как глобальный экземпляр). Синглтон нарушает принцип единой ответственности и делает код очень тесно связанным.
Одиночки — это проблема с точки зрения тестирования. Они, как правило, затрудняют написание изолированных модульных тестов, потому что один тест может изменить глобальное значение, которое недействительно для других тестов.
Почему при использовании шаблона делегирования переменная делегата является слабой?
Так что он не поддерживает ссылку на объект, который он не имеет права сохранять.
Какой подход был бы лучше, чем Singleton?
Инверсия управления (IoC) и внедрение зависимостей — это шаблоны, предназначенные для преодоления проблем синглтона объектно-ориентированным способом.
Что такое шаблон проектирования декоратора?
Шаблон проектирования декоратора (структурный) динамически добавляет поведение и обязанности к объекту, не изменяя его код. В отличие от наследования декорированные объекты не ограничены своими родительскими классами. Другими словами, клиент может контролировать, как и когда украшать компонент. Этот шаблон просто достигается с помощью протокола в Swift.
Что такое фабричный метод в Swift?
Фабричный метод — это порождающий шаблон проектирования, который решает проблему создания объектов без указания их конкретных классов.
Что такое шаблон проектирования фасада?
Шаблон проектирования фасада обеспечивает единый интерфейс для сложной подсистемы. Вместо предоставления пользователю набора классов и API вы предоставляете только один простой унифицированный API. В Swift вы можете добиться этого шаблона, используя расширения и делегирование.
Что такое антипаттерн?
Антишаблон используется с верой в то, что он решит конкретную проблему, но в долгосрочной перспективе создаст больше проблем, чем преимуществ. Шаблоны, считающиеся плохой практикой разработки программного обеспечения, являются антишаблонами. Иногда синглтон считается антипаттерном из-за неправильного использования.
Каковы основные различия между творческими, структурными и поведенческими паттернами?
Шаблон создания обеспечивает способ создания объектов, скрывая логику создания, что обеспечивает гибкость для создания объектов на основе различных вариантов использования.
Структурный шаблон помогает нам управлять классами и объектами вместе для создания более крупных компонентов.
Шаблон поведения помогает нам обеспечить лучшую связь между объектами и повысить гибкость между объектами.
Что такое шаблон адаптера?
Шаблон проектирования адаптера позволяет двум объектам со связанными функциями работать вместе, даже если они имеют несовместимые интерфейсы. Адаптер позволяет объектам взаимодействовать с другими объектами там, где они обычно не могут работать из-за разных интерфейсов. Это структурный шаблон проектирования, который полезен для объединения классов и объектов в более крупную систему. Swift не поддерживает множественное наследование, но Swift поддерживает соответствие нескольким протоколам, вы можете реализовать шаблон адаптера с помощью протоколов.
Что такое шаблон наблюдателя?
Паттерн наблюдателя — это поведенческий шаблон проектирования, в котором объекты могут уведомлять другие объекты об изменениях своего состояния. Шаблон Observer предоставляет способ подписываться на эти события и отписываться от них для любого объекта, реализующего интерфейс подписчика.
Мы можем реализовать шаблон наблюдателя двумя способами в Swift — уведомления и наблюдение за ключом-значением.
Какова схема делегирования?
Делегирование — это шаблон проектирования, который позволяет классу или структуре передавать (или делегировать) часть своих обязанностей экземпляру другого типа. Делегирующий объект обычно хранит ссылку на другой объект (делегата) и отправляет ему сообщение в соответствующее время.
Уважаемые разработчики iOS, имейте в виду
При подготовке к собеседованию важно помнить о нескольких ключевых моментах. Во-первых, стоит отметить, что в разделе интервью доступно более 1000 вопросов для интервью, которые вы можете просмотреть и подготовиться. Читая вопрос, найдите время, чтобы тщательно обдумать свой ответ и обдумать информацию, которую вы хотите передать. Ответ, представленный здесь, в этом блоге, можно объяснить по-другому. Вы также должны подготовить свои примеры.
Также важно помнить, что эти вопросы на собеседовании не должны быть трудными. Интервьюер не хочет бросить вам вызов, а хочет начать разговор, который позволит вашим способностям и интересам выйти на первый план. Они хотят лучше узнать вас и ваш опыт.
Наконец, очень важно избегать простых ответов «да» или «нет». Интервьюеры ищут более подробные ответы, которые включают базовое понимание, рассуждение, объяснение и примеры. Итак, постарайтесь уточнить свои ответы и предоставить конкретную актуальную информацию в поддержку вашего ответа. Это продемонстрирует вашу внимательность и покажет интервьюеру, что вы хорошо подготовились к интервью.