coderisimo
@coderisimo

Как оптимальнее спроектировать большой калькулятор на JAVASCTIPT?

Доводилось делать относительно небольшие проекты, но даже они постепенно превращались в не слишком понятное сосредоточие кода. Суть : исходные данные, много вычислений, возможны изменения в части расчета. Сам расчет однотипный. Но довольно большой, возможны итерации с изменением исходных значений с определенным шагом итд.
Как лучше организовать сие? может придумать классы, с методами, инкапсуляцией и прочими плюшками? Или все равно через пару месяцев там в любом случае будет клубок, который непросто понять? Буду благодарен, как всегда за любые КОНСТРУКТИВНЫЕ идеи. Может есть статьи на данную тему?

Спасибо
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
может придумать классы


1) в JS нет классов.
2) нет не лучше, вы должны оперировать объектами.

Или все равно через пару месяцев там в любом случае будет клубок, который непросто понять?

Инкапсуляция ради инкапсуляции вам ничего не даст.

Вообще проблемы у вас из-за такой штуки как smartui. Проблему эту решили еще в конце 70-х введя такую штуку как MVC. Сегодня MVC (на самом деле сегодня почти все используют MVA но это не суть) любят использовать вместе с MVVM.

Конструктивные идеи: реализуйте модель на JS для начала. Никакого интерфейса пользователя, тупо логика, объектики хранящие данные и логику обработки этих данных, объектики которые могут общаться друг с дружкой и менять состояния друг друга (не напрямую, инкапсуляция же).

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

затем вводим контроллеры. Самый примитивный контроллер:

$('#someInput').on('change', function () {
    // я контроллер
    // я обрабатываю действия пользователя 
    // и прошу модель поменять состояние в соответствии с этими действиями
    model.updateValue(this.value);
});


с вью намного интереснее. Тут лучше применить ViewModel как посредника между View и Model (что бы не писать тучу кода со стороны view которая будет отслеживать состояние модели). Для этого есть кучи клевых библиотек предоставляющих нам ту самюу viewmodel с биндингами.

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

Ну и как-то так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы