Swift iOS Interview Вопросы и ответы – Часть 5 – Архитектура и шаблоны проектирования

Перевод статьи https://ishtiz.com/swift/swift-ios-interview-questions-and-answers-part-5

Часть 5 состоит из вопросов интервью Swift iOS и ответов об архитектуре и шаблонах проектирования. В этой статье я кратко расскажу о различных архитектурах и шаблонах проектирования, таких как MVC, MVVM, VIP, VIPER, а так же структурные, поведенческие и порождающие шаблоны проектирования в iOS.

В: Что такое MVC и объясните основную проблему MVC?
О: MVC/Model-View-Controller — это архитектурный шаблон, используемый для разделения пользовательского интерфейса (представления), данных (модели) и логики приложения (контроллера). Основная проблема MVC заключается в том, что он не заставляет разработчиков разделять обязанности. Например: коды, связанные с сетью, часто можно найти в ViewController. ViewController иногда рассматривается как станция дампа для всех видов логики. По этой причине MVC часто называют массивным контроллером представления.
Роли MVC описаны здесь —
• Модель будет только инкапсулировать данные, она не должна содержать никакой бизнес-логики.
• Представление инкапсулирует то, что пользователь может видеть в пользовательском интерфейсе, и оно также не должно иметь бизнес-логики.
• Контроллер должен поддерживать все виды бизнес-логики, которая проходит между представлением и моделью.

В: Что такое MVVM?
О: MVVM/Model-View-ViewModel — это архитектурный шаблон, позволяющий отделить бизнес-логику и логику представления от пользовательского интерфейса. Создание чистого разделения поможет вам легко находить ошибки и эффективно тестировать. MVVM будет хорошим выбором, если вы хотите уменьшить размер вашего контроллера представления и сделать бизнес-логику более читаемой.
Модель представления вызывает изменения в модели и обновляет себя обновленной моделью, и, поскольку у нас есть привязка между представлением и моделью представления, первая обновляется соответствующим образом.

В: Что такое шаблон проектирования и кратко объясните некоторые часто используемые шаблоны проектирования Cocoa?
О: Шаблоны проектирования — это многократно используемые решения распространенных проблем в разработке программного обеспечения. Шаблоны проектирования могут ускорить процесс разработки, предоставляя проверенные и проверенные парадигмы разработки. Эффективная разработка программного обеспечения требует рассмотрения проблем, которые могут стать видимыми лишь на более позднем этапе реализации. Повторное использование шаблонов проектирования помогает предотвратить тонкие проблемы, которые могут вызвать серьезные проблемы, и улучшает читаемость кода для программистов и архитекторов, знакомых с шаблонами.
Обычно используемые шаблоны проектирования Cocoa:
Порождающие шаблоны: синглтон, фабрика
Структурные шаблоны: декоратор, адаптер, фасад
Поведенческие шаблоны: наблюдатель, хранитель.

В: Что такое шаблон Singleton и почему нам следует избегать его чрезмерного использования?
О: Шаблон singleton(порождающий) гарантирует, что только один экземпляр класса создается за время существования приложения. Это очень простой шаблон для реализации, но он также имеет плохую репутацию из-за неправильного использования. Синглтон убивает идею «разделения интересов», поскольку к нему можно получить доступ отовсюду (они обычно используются как глобальный экземпляр). Синглтон нарушает принцип единой ответственности и делает код очень тесно связанным.

В: Почему синглтоны плохи для тестирования?
О: Синглтон — это проблема с точки зрения тестирования. Они, как правило, затрудняют написание изолированных модульных тестов, потому что один тест может изменить глобальное значение, которое недействительно для других тестов.

В: Почему при использовании шаблона делегирования переменная делегата является слабой(weak)?
О: Не хранит сильную ссылку на объект, который он не имеет права сохранять.

В: Какой подход был бы лучше, чем Singleton?
О: Инверсия управления (IoC) и внедрение зависимостей — это шаблоны, предназначенные для преодоления проблем синглтона объектно-ориентированным способом.

В: Что такое Декоратор(Decorator)?
О: Шаблон проектирования декоратор(структурный) динамически добавляет поведение и обязанности к объекту, не изменяя его код. В отличие от наследования декорированные объекты не ограничены своими родительскими классами. Другими словами, клиент может контролировать, как и когда украшать компонент. Этот шаблон просто достигается с помощью протокола в Swift.

В: Что такое фабричный метод в Swift?
О: Фабричный метод — это порождающий шаблон проектирования, который решает проблему создания объектов без указания их конкретных классов.

В: Что такое Фасад(Facade)?
О: Шаблон проектирования фасад обеспечивает единый интерфейс для сложной подсистемы. Вместо предоставления пользователю набора классов и API вы предоставляете только один простой унифицированный API. В Swift вы можете добиться этого шаблона, используя расширения и делегирование.

В: Что такое антипаттерн?
О: Антишаблон используется с верой в то, что он решит конкретную проблему, но в долгосрочной перспективе создаст больше проблем, чем преимуществ. Шаблоны, считающиеся плохой практикой разработки программного обеспечения, являются анти-шаблонами. Иногда синглтон считается антипаттерном из-за неправильного использования.

В: Каковы основные различия между порождающими, структурными и поведенческими паттернами?
О: Порождающие – обеспечивают способ создания объектов, скрывая логику создания, что обеспечивает гибкость для создания объектов на основе различных вариантов использования.
Структурные – помогаю нам управлять классами и объектами вместе для создания более крупных компонентов.
Поведенческими – помогают нам обеспечить лучшую связь между объектами и повысить гибкость между объектами.

В: Что такое Адаптера(Adapter)?
О: Шаблон проектирования адаптер позволяет двум объектам со связанными функциями работать вместе, даже если они имеют несовместимые интерфейсы. Адаптер позволяет объектам взаимодействовать с другими объектами там, где они обычно не могут работать из-за разных интерфейсов. Это структурный шаблон проектирования, который полезен для объединения классов и объектов в более крупную систему. Swift не поддерживает множественное наследование, но Swift поддерживает соответствие нескольким протоколам, вы можете реализовать шаблон адаптера с помощью протоколов.

В: Что такое Наблюдатель(Observer)?
О: Паттерн наблюдателя — это поведенческий шаблон проектирования, в котором объекты могут уведомлять другие объекты об изменениях своего состояния. Шаблон Observer предоставляет возможность подписываться на эти события и отписываться от них для любого объекта, реализующего интерфейс подписчика.
Мы можем реализовать шаблон наблюдателя двумя способами в Swift — уведомления и Key-Value Observing.

В: Что такое Делегирование(Delegation)?
О: Делегирование — это шаблон проектирования, который позволяет классу или структуре передавать (или делегировать) часть своих обязанностей экземпляру другого типа. Делегирующий объект обычно хранит ссылку на другой объект (делегата) и отправляет ему сообщение в соответствующее время.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *