Я разработчик приложений для iOS.Я застрял в какой-то проблеме рефакторинга при удалении неприятных запахов в моем коде.это так.
Мой проект использует данные XML,
<resource>
<item type='textbox' ... />
<item type='checkbox' ... />
<item type='selectbox' ... />
</resource>
, и я использую его по этому коду.
Item *item = nil;
for (Element *itemElement in resourceChilds)
{
...
if ([[itemElement valueForAttributeNamed:@"type"] isEqualToString:@"textbox"])
{
item = [[Textbox alloc] initWithProperty:itemAttributes];
...
}
else if ([[itemElement valueForAttributeNamed:@"type"] isEqualToString:@"checkbox"])
{
item = [[Checkbox alloc] initWithProperty:itemAttributes];
...
}
else if ([[itemElement valueForAttributeNamed:@"type"] isEqualToString:@"selectbox"])
{
item = [[Selectbox alloc] initWithProperty:itemAttributes];
...
}
...
}
Класс 'Item' - суперкласс классов 'Textbox', 'Checkbox' и 'Selectbox'.
И объект 'itemAttributes' является экземпляром NSDictionary.
Как вы можете видеть выше через initWithProperty: itemAttributes, я уже передал значение атрибута type в экземпляр Item.Я думаю, что можно использовать эту информацию в экземпляре «Item», чтобы специализировать ее на Textbox, Checkbox или Selectbox.
Есть ли способ удалить эти операторы «if» и рефакторинг?Любые предложения приветствуются.И я очень ценю, что вы поделились этим.
Спасибо,
MK