Как лучше спроектировать приложение? Решил написать небольшое приложение на питоне с целью закрепить полученные знания. Во время написания кода почитал про ООП и решил сделать все более абстрактно, в чем собственно и прошу помочь.
Приложение по крону обращается к сервису, авторизуется, получает json с данными. Json содержит данные:{
"data": [{
"Conception": 'Shop1',
"Delivery.IsDelivery": "ORDER_WITHOUT_DELIVERY",
"DishDiscountSumInt": 0,
"DishDiscountSumInt.average": 0,
"OpenDate.Typed": "2016-01-11T00:00:00",
"UniqOrderId.OrdersCount": 2
}, {
"Conception": "Shop2",
"Delivery.IsDelivery": "DELIVERY_ORDER",
"DishDiscountSumInt": 18895,
"DishDiscountSumInt.average": 2699.29,
"OpenDate.Typed": "2016-01-11T00:00:00",
"UniqOrderId.OrdersCount": 7
}, {
"Conception": "Shop2",
"Delivery.IsDelivery": "ORDER_WITHOUT_DELIVERY",
"DishDiscountSumInt": 63376,
"DishDiscountSumInt.average": 358.06,
"OpenDate.Typed": "2016-01-11T00:00:00",
"UniqOrderId.OrdersCount": 177
}],
"summary": [
[{
"Conception": null,
"OpenDate.Typed": "2016-01-11T00:00:00"
}, {
"DishDiscountSumInt": 0,
"DishDiscountSumInt.average": 0,
"UniqOrderId.OrdersCount": 2
}],
[{
"Conception": "Shop2",
"Delivery.IsDelivery": "DELIVERY_ORDER"
}, {
"DishDiscountSumInt": 18895,
"DishDiscountSumInt.average": 2699.29,
"UniqOrderId.OrdersCount": 7
}],
[
{}, {
"DishDiscountSumInt": 82271,
"DishDiscountSumInt.average": 442.32,
"UniqOrderId.OrdersCount": 186
}
],
[{
"Conception": "Shop2",
"Delivery.IsDelivery": "ORDER_WITHOUT_DELIVERY"
}, {
"DishDiscountSumInt": 63376,
"DishDiscountSumInt.average": 358.06,
"UniqOrderId.OrdersCount": 177
}],
[{
"Conception": null,
"Delivery.IsDelivery": "ORDER_WITHOUT_DELIVERY"
}, {
"DishDiscountSumInt": 0,
"DishDiscountSumInt.average": 0,
"UniqOrderId.OrdersCount": 2
}],
[{
"Conception": "Shop2"
}, {
"DishDiscountSumInt": 82271,
"DishDiscountSumInt.average": 447.13,
"UniqOrderId.OrdersCount": 184
}],
[{
"OpenDate.Typed": "2016-01-11T00:00:00"
}, {
"DishDiscountSumInt": 82271,
"DishDiscountSumInt.average": 442.32,
"UniqOrderId.OrdersCount": 186
}],
[{
"Conception": null
}, {
"DishDiscountSumInt": 0,
"DishDiscountSumInt.average": 0,
"UniqOrderId.OrdersCount": 2
}],
[{
"Conception": "Shop2",
"Delivery.IsDelivery": "DELIVERY_ORDER",
"OpenDate.Typed": "2016-01-11T00:00:00"
}, {
"DishDiscountSumInt": 18895,
"DishDiscountSumInt.average": 2699.29,
"UniqOrderId.OrdersCount": 7
}],
[{
"Conception": "Shop2",
"Delivery.IsDelivery": "ORDER_WITHOUT_DELIVERY",
"OpenDate.Typed": "2016-01-11T00:00:00"
}, {
"DishDiscountSumInt": 63376,
"DishDiscountSumInt.average": 358.06,
"UniqOrderId.OrdersCount": 177
}],
[{
"Conception": "Shop2",
"OpenDate.Typed": "2016-01-11T00:00:00"
}, {
"DishDiscountSumInt": 82271,
"DishDiscountSumInt.average": 447.13,
"UniqOrderId.OrdersCount": 184
}],
[{
"Conception": null,
"Delivery.IsDelivery": "ORDER_WITHOUT_DELIVERY",
"OpenDate.Typed": "2016-01-11T00:00:00"
}, {
"DishDiscountSumInt": 0,
"DishDiscountSumInt.average": 0,
"UniqOrderId.OrdersCount": 2
}]
]
}
Далее приложению нужно спарсить все это дело, сформировать сообщение и отправить в Slack.
На данный момент у меня все реализовано так:
есть класс Conceptions:class Conception:
# Класс хранит в себе название, показатели доставки и локальных продаж
def __init__(self, n):
self.name = n
self.delivery = ['Доставка', {'sum': 0, 'chq': 0, 'avg': 0}]
self.notdelivery = ['Прилавок', {'sum': 0, 'chq': 0, 'avg': 0}]
def setname(self, newname):
self.name = newname
def set_values_d(self, s, c, a):
self.delivery[1]['sum'] = s
self.delivery[1]['chq'] = c
self.delivery[1]['avg'] = a
def set_values_nd(self, s, c, a):
self.notdelivery[1]['sum'] = s
self.notdelivery[1]['chq'] = c
self.notdelivery[1]['avg'] = a
def __str__(self):
return 'Концепция: {0}\n''Доставка: {1}\n''Прилавок: {2}'. \
format(self.name, self.delivery, self.notdelivery)
Есть функции:
getReport() - получает данные от сервиса и парсит json;
setValue() - формирует список концепций со значениями;
sentMsg() - формирует нужный json и отправляет сообщение в Slack.
Вопросы:
1) Правильно ли я спроектировал все?
2) Можно ли что-то улучшить?

21 Авг 2019 в 07:02
168 +1
0
Ответы
1

1) Подход с созданием класса Conception для хранения данных о концепциях и их продажах является хорошим способом организации кода. Определение методов для установки значений продаж и вывода информации о концепции делает код более структурированным и понятным.

2) Есть несколько способов улучшить код:

Можно добавить методы для получения значений продаж из JSON данных и установки их в объекты Conception. Это позволит избежать повторения кода в функциях getReport() и setValue().Рассмотрите возможность использования наследования, если в вашем приложении есть общие характеристики для разных типов концепций.Разделите функцию sentMsg() на несколько более мелких функций для лучшей читаемости и переиспользования кода.Проверьте возможность использования библиотек для работы с JSON и отправки сообщений в Slack, чтобы упростить код и сделать его более надежным.

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

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 017 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир