Я работаю с другом над одностраничным приложением (в React, но я считаю, что фреймворк на самом деле не имеет значения, тот же вопрос относится и к Angular).
Есть база данных с 2 таблицами:
Обе таблицы связаны в базе данных с отношением «многие ко многим».
Мы различаемся в том, как мы должны передавать данные из бэкэнда во внешний интерфейс (точнее, CarManagementComponent, который позволит пользователю работать с машинами / функциями (редактировать / обновлять / удалять и т. Д.)). Мы хотим иметь возможность выполнить несколько действий перед тем, как отправлять запрос обратно на сервер, чтобы обновить базу данных, чтобы пользователь имел интерфейс, похожий на настольное приложение.
Пожалуйста, имейте в виду, что в базе данных есть больше таблиц, но для простоты примера мы говорим только о 2 из них.
1) Мой подход:
{
"Features": [
{
"Id": 0,
"Price": 3000,
"Name": "led lights",
"Color": "transparent",
"Brand": "Valeo",
"Guarantee": 12
},
{
"Id": 1,
"Price": 1000,
"Name": "air conditioning",
"Color": "",
"Brand": "Bosch",
"Guarantee": 12
},
{
"Id": 2,
"Price": 600,
"Name": "tinted windows",
"Color": "",
"Brand": "Bosch",
"Guarantee": 36
}
],
"Cars": [
{
"Id": 0,
"Name": "Ford Mustang GT",
"Weight": 2210,
"Features":[
{
"Id": 0, // id of many-to-many relations record
"FeatureId": 2
},
{
"Id": 1, // id of many-to-many relations record
"FeatureId": 1
}
]
},
{
"Id": 1,
"Name": "Volkswagen Arteon",
"Weight": 1650,
"Features":[
{
"Id": 2, // id of many-to-many relations record
"FeatureId": 2
}
]
}
]
}
2) Подход моего друга:
{
"Cars": [
{
"Id": 0,
"Name": "Ford Mustang GT",
"Weight": 2210,
"Features": [
{
"Id": 1,
"Price": 1000,
"Name": "air conditioning",
"Color": "",
"Brand": "Bosch",
"Guarantee": 12
},
{
"Id": 2,
"Price": 600,
"Name": "tinted windows",
"Color": "",
"Brand": "Bosch",
"Guarantee": 36
}
]
},
{
"Id": 1,
"Name": "Volkswagen Arteon",
"Weight": 1650,
"Features": [
{
"Id": 2,
"Price": 600,
"Name": "tinted windows",
"Color": "",
"Brand": "Bosch",
"Guarantee": 36
}
]
}
]
}
Я считаю, что 1-й подход лучше, потому что:
- весит меньше (без избыточности данных)
- было бы проще преобразовать такие данные в объектно-ориентированную структуру
- например. мы можем видеть все записи Feature (при втором подходе мы увидим только те записи, которые связаны с Cars, и потребуется еще один внутренний запрос)
- например. в отличие от второго подхода, мы можем получить все необходимые данные всего за 1 запрос (меньше проблем с синхронизацией), и мы можем сохранить измененные данные в одном запросе
Мой друг говорит, что второй подход лучше, потому что:
- было бы проще добиться этого с помощью ORM (спящий режим)
- он никогда не видел 1-й подход в своей жизни (который может привести к выводу, что это делается неправильно)
Что ты думаешь? Какое решение лучше? Может быть, они оба в некоторых областях? Может быть, есть третье решение, о котором мы еще не думали?