Шаблон проектирования VIPER в представлении конфигурации Swift
Я недавно перешел на VIPER и при использовании этого типа архитектуры возник такой вопрос:
Например, у меня в дизайне длинный пользовательский интерфейс (высота 2000pt) с более чем 50 элементами интерфейса, такими как метки, кнопки, виды, коллекции и т. Д., И мне нужно добавить к ним круглые углы и тени.
Где мне настроить его внешний вид? Должно ли это быть в представлении, или как-то в Presenter?
До сих пор я расширил UIView, создал метод для отбрасывания тени.
Прямо сейчас, что я имею в модуле View:
override func viewDidLayoutSubviews() {
doctorsNearCollection.backgroundColor = UIColor(white: 1, alpha: 0)
newsMayBeInterestedCollection.backgroundColor = UIColor(white: 1, alpha: 0)
recentSavedNewsCollection.backgroundColor = UIColor(white: 1, alpha: 0)
setupCharts()
scheduleMetting.dropShadow()
scheduleMetting.layer.cornerRadius = 5
monthlyPerformaceBackground.dropShadow()
monthlyPerformaceBackground.layer.cornerRadius = 5
firstMeeting.dropShadow()
firstMeeting.layer.cornerRadius = 5
firstMeetingNumber.layer.cornerRadius = self.firstMeetingNumber.frame.size.width / 2
secondMeeting.dropShadow()
secondMeeting.layer.cornerRadius = 5
secondMeetingNumber.layer.cornerRadius = self.secondMeetingNumber.frame.size.width / 2
thirdMeeting.dropShadow()
thirdMeeting.layer.cornerRadius = 5
thirdMeetingNumber.layer.cornerRadius = self.thirdMeetingNumber.frame.size.width / 2
seeAllMeetings.dropShadow()
seeAllMeetings.layer.cornerRadius = 5
searchForDoctors.dropShadow()
searchForDoctors.layer.cornerRadius = 5
seeAllSavedNews.dropShadow()
seeAllSavedNews.layer.cornerRadius = 5
}
Это хорошая практика? Я заинтересован в настройке внешнего вида, так как другие методы мне кажутся более или менее понятными. Заранее спасибо.
1 ответ
- Как описано в https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial , детали и конструкции пользовательского интерфейса должны помещаться в карантин в зоне просмотра и никогда не появляться в зоне докладчика, поскольку зона просмотра обрабатывает / помещает в карантин все детали / концепции пользовательского интерфейса как внутреннее дело, тогда как зона докладчика обрабатывает / помещает в карантин все чистые детали / концепции домена приложения как внутреннее дело.
- В духе принципа «никогда не говори никогда», единственный раз, когда «закругленные углы и тени» элементов пользовательского интерфейса будут в зоне презентатора, это если сам домен приложения является генератором пользовательского интерфейса или пользовательским интерфейсом. редактор или инструмент UI-Designer, где пользовательский интерфейс нижестоящего (-app) (т. е. не пользовательский интерфейс этого приложения) является доменом приложения этого приложения. Поэтому, если ваше приложение не является средой проектирования пользовательского интерфейса для разработки пользовательского интерфейса, элементы пользовательского интерфейса никогда не выходят из зоны просмотра (и даже в исключительных случаях это элементы пользовательского интерфейса какого-либо другого приложения, а не элементы пользовательского интерфейса текущего приложения).
- Просто потому, что некоторый UI-ориентированный код должен быть выделен как общность между представлениями, это не означает, что он получает обработку VIPER для проникновения в другие 4 зоны {интерактор, презентатор, сущности, маршрутизатор} как способ выражения общность. Сама зона обзора может иметь слои. Один из таких слоев - это инфраструктурная библиотека, объединяющая 2 или более представлений. (Другим таким уровнем может быть фасад, который преобразует события, ориентированные на пользовательский интерфейс, в события, ориентированные на домен приложения, которые переходят между зонами, чтобы ведущий обрабатывал их не как событие, ориентированное на пользовательский интерфейс, а как событие домена приложения, независимо от того, как оно происходит. представлены в пользовательском интерфейсе.) Если некоторая функция, метод, процедура, подпрограмма или сопрограмма должна быть выделена как общность для нескольких представлений в зоне представления, то оставьте эту выделенную функцию, метод, процедуру, подпрограммуили сопрограммы в библиотеке в зоне просмотра, а не в других зонах IPER.