Я просто хотел бы уточнить, что под «дизайном» я подразумеваю дизайн программного обеспечения, а не дизайн пользовательского интерфейса.
У меня есть приложение, похожее на приложение с собственными настройками.Проблема, с которой я столкнулся, заключается в том, что она не следует тому же четкому стилю MVC.Другие приложения имеют тенденцию фокусироваться на отображении одного вида вещей.Например, в случае приложения периодической таблицы это элементы.Элементы четко составляют модель, и они имеют схожие свойства и поведение, то есть они могут отображаться и взаимодействовать одинаково.Такое приложение почти само проектируется!
Мое приложение, как и приложения с настройками, состоит из произвольного выбора строк, отображающих разнородные данные разными способами.Одна строка может содержать переключатель, другая может модально представлять очень специфическое представление при нажатии.Они все очень разные.
Как вы проектируете что-то подобное?
В данный момент я делаю все это в контроллере представления, и соответствующие строки отслеживаются с помощьюперечисление:
enum {
kNameRow,
kGenderRow,
kJobTypeRow,
kLevelOfExerciseRow,
kEmailAddressRow,
kTelephoneNumberRow
};
Как я описал, все эти ячейки очень разные, поэтому отображение ячеек обрабатывается так:
// - tableView:cellForRowAtIndexPath pseudocode.
switch (indexPath.row) {
case kNameRow: // create name cell.
case kGenderRow: // create gender cell.
case kJobTypeRow: // create job type cell.
case kLevelOfExerciseRow: // create level of exercise cell.
case kEmailAddressRow: // create email address cell.
case kTelephoneNumberRow: // create telephone number cell.
}
И взаимодействие с ячейками обрабатывается аналогично:
// - tableView:didSelectRowAtIndexPath pseudocode.
switch (indexPath.row) {
case kNameRow: // do name-specific stuff.
case kGenderRow: // do gender-specific stuff.
case kJobTypeRow: // do job type-specific stuff.
case kLevelOfExerciseRow: // do level of exercise-specific stuff.
case kEmailAddressRow: // do email address-specific stuff.
case kTelephoneNumberRow: // do telephone number-specific stuff.
}
Это кажется очень громоздким, и есть дополнительная проблема не работает, когда таблица разбита на несколько разделов.
Есть ли лучший способ сделать это?Существуют ли какие-либо шаблоны проектирования, которые я мог бы использовать при работе с большими таблицами в основном несвязанных данных?
Любые советы вообще приветствуются.