0

Я строю арифметическое приложение &, в нем есть подклассы NSObject для чисел и цифр. Оба из них имеют соответствующие объекты вида, которые принимают источник данных (номер или цифру) и делегат , контроллер вида.вид как свойство модели объекта альтернативный

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

Например, класс Number имеет свойство NSMutableArray, которое содержит его цифры.

Если я хочу, чтобы найти размер для соответствующего NumberView, я пишу может писать код, как это в контроллере:

-(void) updateNumberViewFrameSize:(ACNumberView*) sender 
{ 
    NSUInteger i; 
    float width = 0, height = 0; 
    for (ACDigit* digit in [sender.dataSource returnNumberViewDataSource].digitArray) 
    { 
     width += digit.digitView.size.width; 
     height += digit.digitView.size.width; 
    } 
    sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, width, height); 
} 

код прекрасно работает, но я чувствую, что это не хорошая практика, чтобы удерживайте этот указатель на представление из модели, даже если модель не использует его сама.

Если это плохая практика, каковы потенциальные ловушки, и есть ли лучший способ достичь этого типа конца?

ответ

1

Во-первых: Вы правы. Это не хороший дизайн.

Во-вторых: Вы вычисляете размер числового вида внутри модели. Но числовое представление должно знать его размер. Он знает номер через свой источник данных и может получать цифры. Таким образом, у него есть вся информация для расчета его размера.

Чтобы показать проблему, представьте себе (даже эта ситуация на iOS не такая обычная), что вы показываете одинаковое число в двух местах (= с разными номерами). Это сломает вашу модель . Зачем?

Решение: Поместите весь код, связанный с графическим состоянием (рисунок, размер, ...) в числовое представление и представление цифр. На половине пути это будет дополнительная работа. Но в конце, когда каждый код переносится на уровень представления, он так же прост, как вычислять его внутри модели.

+0

Хороший пример, почему это неправильно. Можно ли получить доступ к его представлениям? – chartman

+1

@chartman Да, с [view subviews]. –

+0

Вы правы, гораздо лучше просто рассчитать размер представления для числа, основанного на том, что он должен хранить в нем, а не получать данные из представлений – chartman