kovalibre / electro

My first Python programm
1 stars 0 forks source link

Комментарии по архитектуре. #6

Open sentyaev opened 6 years ago

sentyaev commented 6 years ago

Думаю пришло время тебе познакомится с тестированием, т.к. в процессе доработки приложения ты вносишь довольно много изменений и было бы неплохо иметь возможность проверить, что очередное изменение не сломало программу.

Чтобы тебе не пришлось сильно закапываться во все дебри, давай представим, что мы команда разработчиков. Ты будешь разработчиком, а я твоим техлидом. Т.е. твоей задачей будет разработка программы, а моей - помощь по технической части, проработке архитектурных решений, ну и помогу тебе с настройкой проекта.

Добавь меня в коллабораторы проекта, я тебе вкоммичу небольшой апдейт проекта (самые базовые вещи, типа список зависимостей, пару тестов и т.д.)

Что нужно будет сделать: 1. Сделать модуль вместо скрипта

# добавить главную функцию
def main():
  version = '0.1.2'
  ...
  new_data.add_to_db()

# добавить возможность запуска модуля как скрипта
# в конец файла добавь
if __name__ == '__main__':
    main()

После этого все продолжит работать как и раньше, но теперь логика нашей программы находится в функции main.

2. Определить какие данные тебе нужно сохранить Например сейчас ты сохраняешь 'Стоимость коммунального потребления с человека' и ИТОГО и т.д. Действительно ли это нужно хранить? Возможно это ответственность программы вычислять эти данные, а сохранять только тариф, потребление, кол-во комнат и людей.

3. Выделить классы предметной области Те классы которые есть сейчас не относятся к предметной области. У тебя же должно быть что-то вроде: Apartment, Room, Tariff, ElectricMeter, ConsumptionReport и т.д.

4. Загрузка/сохранение данных Нужно выделить отдельный класс Database для загрузки и сохранения данных. Для начала он будет использовать либо pickle, либо shelve. https://docs.python.org/3/library/pickle.html https://docs.python.org/3/library/shelve.html

5. Ввод данных Твои классы доменной области ничего не должны знать как данные к ним приходят. Т.е. нужно написать отдельную функцию или класс которая умеет прочитать данные из консоли (спросить у пользователя) и создать класс Apartment (как я понимаю это твой самый главный класс, который будет в себе уже содержать данные по комнатам).

6. Тесты Прямо сейчас программа нетестопригодна. Тебе нужно сделать пункт 1, и после этого можно будет провести серию небольших рефакторингов (улучшений кода), чтобы была возможность писать тесты.

Что я предлагаю: Дай мне доступ на изменения в этом репозитории. Выполни пункт 1. В следующий раз когда мы созвонимся, я покажу как подготовить программу к тестированию, и мы сразу изменим код и напишем один тест.