Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!07.08.2023
Як кодувати міста в програмній системі?
Вправа: користувач має змогу обрати своє місто та країну, з автодоповненням. Далі адміністратор може побачити користувачів за обраним містом та країною. Як би я реалізував таку функціональність?
-
Варіант наївний. Робимо два текстових поля, автодоповнення зі списку країн та великих міст — або свій варіант. Відповідно, адміністратор робить запити за текстовим збігом. Плюси: мінімум зусиль; покриває буквально всі міста у світі — поточні, минулі та майбутні. Мінуси: у даних будуть розбіжності — помилки, альтернативні назви, назви різними мовами, та інше. Такий варіант підходить для невибагливих систем — наприклад, мапа мешкання спільноти не потребує прямо стовідсоткової повноти.
-
Варіант специфічний. Часто список міст цілком конкретний. Наприклад, в поштовій системі це можуть бути міста з відділеннями. Тут можна зробити табличку в базі та дати обирати міста зі списку. Плюси: максимальна чіткість, простота для користувача. Мінуси: вимагає наявності готового переліку. Тут треба запитати: чи дійсно потрібно дозволити користувачу обрати будь-яке місто? Чи є в цьому користь для продукту?
-
Варіант утопічний. Моделюємо всі міста у світі, скориставшись, напевно, деякою готовою базою даних. Тут, на мою думку, баланс “витрати — користь” непрактичний. В реальних географічних даних купа ускладнень. Єдине місто може називатись різними іменами: Krakow, Cracow чи Krakau? Навпаки — є сила-силенна міст-тезок: у США 5 Лондонів, а у Херсонській області — три Новодмитрівки. Фактично, така проста ззовні функція вибору міста перетворюється на повноцінний продукт. Тому…
-
Варіант аутсорсингу. Варто звернутись до готових рішень: API. Наприклад, API Google Maps. Він повідомить дві назви:
main_text
- назву міста, таsecondary_text
- уточнюючу локацію — наприклад, “Новодмитрівка” та “Білозерський район, Херсонська область”. Цей API вже знає й різні мови, й альтернативні назви. Окрім того, він повертаєplace_id
- унікальний ідентифікатор, який можна зберігати у свою базу та легко за ним фільтрувати.
До речі: цікава гра “Скільки міст ти знаєш?”. Мені подобається, що вона повідомляє, який відсоток населення живе у вказаних тобою містах.