Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1

Code review by Java Professional Developer

15.10.2015, 14:43. Показов 1153. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, нужен человек с достаточно высоким левелом по Java, для проведения Code review моего проекта.

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

Заранее благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2015, 14:43
Ответы с готовыми решениями:

Code Review
Здравствуйте! Для меня программирование как хобби. Очень понравился Ruby, как язык программирования. Возникла необходимость...

Code Review
Доброго времени суток.Сделал небольшой проектик на WPF и хотел бы попросить шарящих сделать мне Code Review.Думаю каждый из классов...

Нужен CODE REVIEW
Всем доброго времени суток. Нужна помощь более опытных товарищей. А точнее есть некий код необходимо сделать code review, и высказать...

6
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
15.10.2015, 17:09
Almaz_1993, для того чтобы делать код ревью для такого проекта нужно либо понимать в трейдинге, либо видеть диаграмму классов, их отношений, и flow диаграмму объясняющую что происходит в системе. Можно конечно долго читать код и все это понять, но мне нарпимер жаль на это времени.

Из быстрого просмотра проекта:

* Не храните lib на гитхабе. Мейвен должен сам приносить что надо
* Проект использует (или не использует) некую библиотеку, которой нет в pom.xml. Импорты lt.monarch.* не резолвятся (я так понимаю это UI)
* Все методы довольно длинные что затрудняет чтение и понимание кода. Метод не должен превышеть 10-50 строк
* В программе используется константа DEFAULT_OUTPUT_REPORT_DIRECTORY которая указывает на директорию которой может и не быть. Эта настройка должна быть в проперти файлах или указывать на директорию проекта которая гарантировано существует.

* BackTester tester = new BackTester(strategy, backTestDataProvider); -- зачем передавать провайдер если он есть как поле в стратегии?

* Сам провайдер можно реализовать как итератор. Делать это через переменную currentBarIndex имхо так себе
* В проекте указанно что для него необходима джава 8, однако никакого кода из джава 8 я не увидел (полагаю джава 8 это для javaFX, однако почему бы не писать уже код на джава 8 если она используется)

Насчет архитектуры сказать немогу т.к не особо всматривался, но вроде ничего страшного не увидел.
1
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
15.10.2015, 18:14  [ТС]
Спасибо большое!

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
* Не храните lib на гитхабе. Мейвен должен сам приносить что надо
Fixed

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Проект использует (или не использует) некую библиотеку, которой нет в pom.xml. Импорты lt.monarch.* не резолвятся (я так понимаю это UI)
Да, это UI. lt.monarch - это либа для построения графиков, для которой нет открытой maven directory. Не знаю откуда и куда ставить mvn dependency, т.е. что прописать в dependency. Но этот jar файл есть в /resource/libs

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Все методы довольно длинные что затрудняет чтение и понимание кода. Метод не должен превышеть 10-50 строк
Понял, буду править. Много раз читал, что не надо делать длинные методы - буду фиксить

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
В программе используется константа DEFAULT_OUTPUT_REPORT_DIRECTORY
Will be fixed soon

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
* BackTester tester = new BackTester(strategy, backTestDataProvider); -- зачем передавать провайдер если он есть как поле в стратегии?
Вот такие архитектурные ошибки и выводят меня из себя. Как так получается - не понимаю, как-то само :-(

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Сам провайдер можно реализовать как итератор. Делать это через переменную currentBarIndex имхо так себе
На данный момент этот код этого класса не до конца готов. Этот класс по идее должен выдавать информацию о только текущей и прошлых барах.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
В проекте указанно что для него необходима джава 8,
Там, в некоторых моментах юзаются лямбды

Добавлено через 3 минуты
Цитата Сообщение от Almaz_1993 Посмотреть сообщение
зачем передавать провайдер если он есть как поле в стратегии?
А это вообще нормально, что у Strategy есть поле BackTestDataProvider ?
Это же ведь вродь 2 разные сущности и они ни в коем случае не включаться друг в друга?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
15.10.2015, 18:41
Цитата Сообщение от Almaz_1993 Посмотреть сообщение
это вообще нормально, что у Strategy есть поле BackTestDataProvider
незнаю. Для этого надо точнее понимать архитектуру проекта и назначение каждого класса. Я в это не углублялся.
0
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
15.10.2015, 19:02  [ТС]
Еще не нравится вот такие вещи. Мне кажется такие вещи можно было более элегантнее решить.

Эти значения проперти - используются для репортинга

class BackTester
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 private BackTestResearchResult getBackTestResult() throws TradingException{
        BackTestResearchResult result = new BackTestResearchResult(this.strategy);
//        result.setProperties(strategy.getProperties());
 
        result.setOrders(strategy.getPositionManager().getClosedOrders());
        result.setStockHistory(backTestDataProvider.getStockHistory());
 
 
        Map<String, Object> properties = result.getProperties();
 
        properties.put("strategyName", this.strategy.getStrategyName());
        properties.put("orders", this.strategy.getPositionManager().getClosedOrders());
        properties.put("grossProfit", TradeUtils.getGrossProfit(result));
        properties.put("grossLoss", TradeUtils.getGrossLoss(result));
        properties.put("totalNet", TradeUtils.getTotalNet(result));
        properties.put("profitFactor", TradeUtils.getProfitFactor(result));
        properties.put("expectedPayoff", TradeUtils.getExpectedPayoff(result));
 
        properties.put("totalTrades", TradeUtils.getCountPositions(result));
        properties.put("totalShortTradeCount", TradeUtils.getShortPositions(result));
        properties.put("totalLongTradeCount", TradeUtils.getLongPositions(result));
        properties.put("totalProfitTradeCount", TradeUtils.getCountProfitTrades(result));
        properties.put("totalLossTradeCount", TradeUtils.getCountLossTrades(result));
 
        properties.put("totalLargestProfit", TradeUtils.getLargestProfit(result));
        properties.put("totalLargestLoss", TradeUtils.getLargestLoss(result));
        properties.put("totalAverageProfit", TradeUtils.getAverageProfit(result));
        properties.put("totalAverageLoss", TradeUtils.getAverageLoss(result));
        properties.put("totalProfitPercentage", TradeUtils.getTotalProfitPercentage(result));
 
        properties.put("consecutiveProfitCount", TradeUtils.getConsecutiveProfitCount(result));
        properties.put("consecutiveLossCount", TradeUtils.getConsecutiveLossCount(result));
        properties.put("defaultOrderSize", strategy.DEFAULT_ORDER_SIZE);
        properties.put("drawdownBalanceClose", TradeUtils.getDrawdownBalanceClose(result));
        properties.put("startDate", TradeUtils.getFirstBar(backTestDataProvider).getDate());
        properties.put("endDate", TradeUtils.getLastBar(backTestDataProvider).getDate());
 
        return result;
    }
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
15.10.2015, 19:45
Almaz_1993, я бы не парился и так же написал бы. Можно впринципе придумать какого-нибудь монстра с рефлексией, но тогда этот код никто не поймет.
1
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
15.10.2015, 22:11  [ТС]
Проблема еще в том, что не все проперти используются.

Для одного репорт билдера - нужны одни данные, для другого другие.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2015, 22:11
Помогаю со студенческими работами здесь

Нужен Code Review, коллеги
я пишу макросы на VBA уже около 10 лет и до сих пор даже со стандартом именования переменных до конца не определился. Коллеги, помогите...

Code Review игры Тетрис
Доброго времени суток. Я самоучка. Для практики написал тетрис в консоли. Столкнулся с тем, что нужен взгляд на код со стороны, опытным...

Как делать code review?
Я очень-очень начинающая. Сменила поле деятельности радикально. По воле какого-то очень загадочного и благосклонного ко мне случая взали...

[Code review] ООП ошибки
Здравствуйте! Есть программа и она рабочая. И мне для дальнейшего программирования необходимо знать насколько она правильно, оптимально и...

[Code review] Реализация INotifyPropertyChanged
Ребят, а я вот такую штуку написал. Вроде бы и лаконично, понятно и без особых костылей?! К чему этот пост: Могли бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru