|
|
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Есть легаси код в котором ну очень много if - ов. По сути это импортер данных из множества источников в единый формат. Все источники похожи но везде по немногу исключений. Ну вроде как где то FIO в базе по разным полям занесено, а где то в едином. Где то серия и номер документов в одном поле, а где то в разных. Где то по длине серии определяется тип документа и тд. Количество настроек уже зашкаливает и каждый раз приходится при добавлении новой фичи или изменении старой отслеживать всю цепочку от места где обрабатывается код - какие там переменные и откуда туда попали данные с самого начала (вплоть до колонки в БД или файла настроек). Весь код построен на if ах. А настроек просто бизнец сколько. Это какое то разделение данных с помощью определенных правил. Может как то это упорядочить можно. А как вообще такого рода задачи решаются? Это какой то специальный тип задач и/или может есть какие то готовые алгоритмы? Куда смотреть (имеется ввиду в теоретическом плане)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 09:43 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Полиморфизм в помощь! Покажи лучше кодом как оно выглядит. Подскажу как зарефакторить. Рекомендую и книги прочесть по теме: http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672 http://www.amazon.com/Robert-Martin-Clean-Code-Collection-ebook/dp/B00666M59G ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 09:45 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
код с душком. один главный метод на 6000 строк был. За книжки спасибо мартина фаулера уже читаюс недельку, уже удалось сжать до 1500 строк вынесение в методы повторяющихся кусков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 09:54 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
llemingкод с душком. один главный метод на 6000 строк был. За книжки спасибо мартина фаулера уже читаюс недельку, уже удалось сжать до 1500 строк вынесение в методы повторяющихся кусков. Да, "колбаса" часто решается в два этапа. Находим схожий код и выносим в методы. Организуем методы в классы используя наследование и полиморфизм, заменяя множественные if...else/switch...case на параллельные иерархии (что-то типа GoF Bridge) Трудно что-то конкретное советовать, не видя код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:10 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Как всегда + к Blazkowicz. Лично я еще использую такие вещи - 1) перво-наперво переименовываю все переменные чтобы они отражали суть происходящего Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. на какое нибудь. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 2) Все что в if условии выношу в методы с понятным названием Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 3) Ну и после этого уже начинаешь понимать какие куски кода в какой класс\стратегию\команду и тп можно завернуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:37 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
переменные я переименовал сразу и значения постоянные из DB вынес в константы сразу. Попробую вынести if в методы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:51 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
забыл ник2) Все что в if условии выношу в методы с понятным названием Вот это дельный совет. В Clean Code об этом тоже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:54 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Replace Conditional with Polymorphism ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 18:46 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Можно придумать язык описания формата исходных данных и парсер, который берет файл описания формата и парсит данные. Дальше на каждый источник вы заводите свой файл описания формата данных. второй вариант - это тупо на каждый источник по классу-парсеру. Делаются они копипастой и модификацией ну и наследование, если в форматах данных много похожего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 22:53 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Usmanlleming, http://ru.wikipedia.org/wiki/Контрактное_программирование Например, при помощи AspectJ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 02:06 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
UsmanUsmanlleming, http://ru.wikipedia.org/wiki/Контрактное_программирование Например, при помощи AspectJ Каким образом автору может быть полезен AspectJ ? Ему нужно делать жёсткий рефакторинг кода. Здесь никакие аспеакты не помогут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 10:03 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Usman, Статья явно написана для тех, кто уже знает что это такое. Нету примеров - и непонятно в чем фишка. Статья конечно более понятна, чем когда я попытался выучить с++ по страуструппу, но все равно то время вспомнилось. Насколько я понял, простыми словами - это перед вызовом проверить корректность входных данных а после позврата результата - проверить корректность результата. Но момент - как это может помочь топик стартеру, не раскрыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 10:04 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
chabapokНасколько я понял, простыми словами - это перед вызовом проверить корректность входных данных а после позврата результата - проверить корректность результата.Именно. Проверки можно осуществлять как для входных (before), так и для выходных данных методов (after), как раздельно, так и "одновременно" (around) (условно - в одном "обработчике").chabapokНо момент - как это может помочь топик стартеру, не раскрыт.Основная проблема на данный момент у ТС - разгрести многокилометровый if-овый код (и не только). Для начала, как и советовали выше, ТСу необходимо избавиться от повторяющегося функционала, выделить сущности... и оформить все это дело в виде отдельных классов/методов. И только после этого можно говорить о применении каких-либо ООП-решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 13:51 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
maytonЕму нужно делать жёсткий рефакторинг кода.Ну, с этим никто не спорит (: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 13:52 |
|
||
|
как бороться с if - ами
|
|||
|---|---|---|---|
|
#18+
Здесь надо в код смотреть. Я-бы дал 9 против 1 что там нужен RCWP. Типичная ситуация - где-то в БД лежат разные объекты в одной таблице и для каждого нужна своя логика обработки. От этого растут огромные if, switch-case на 1000 строк кода и прочее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 14:42 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2126964]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
171ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 450ms |

| 0 / 0 |
