У Льоні сьогодні

Як кодувати міста в програмній системі?

Вправа: користувач має змогу обрати своє місто та країну, з автодоповненням. Далі адміністратор може побачити користувачів за обраним містом та країною. Як би я реалізував таку функціональність?

  • Варіант наївний. Робимо два текстових поля, автодоповнення зі списку країн та великих міст — або свій варіант. Відповідно, адміністратор робить запити за текстовим збігом. Плюси: мінімум зусиль; покриває буквально всі міста у світі — поточні, минулі та майбутні. Мінуси: у даних будуть розбіжності — помилки, альтернативні назви, назви різними мовами, та інше. Такий варіант підходить для невибагливих систем — наприклад, мапа мешкання спільноти не потребує прямо стовідсоткової повноти.

  • Варіант специфічний. Часто список міст цілком конкретний. Наприклад, в поштовій системі це можуть бути міста з відділеннями. Тут можна зробити табличку в базі та дати обирати міста зі списку. Плюси: максимальна чіткість, простота для користувача. Мінуси: вимагає наявності готового переліку. Тут треба запитати: чи дійсно потрібно дозволити користувачу обрати будь-яке місто? Чи є в цьому користь для продукту?

  • Варіант утопічний. Моделюємо всі міста у світі, скориставшись, напевно, деякою готовою базою даних. Тут, на мою думку, баланс “витрати — користь” непрактичний. В реальних географічних даних купа ускладнень. Єдине місто може називатись різними іменами: Krakow, Cracow чи Krakau? Навпаки — є сила-силенна міст-тезок: у США 5 Лондонів, а у Херсонській області — три Новодмитрівки. Фактично, така проста ззовні функція вибору міста перетворюється на повноцінний продукт. Тому…

  • Варіант аутсорсингу. Варто звернутись до готових рішень: API. Наприклад, API Google Maps. Він повідомить дві назви: main_text - назву міста, та secondary_text - уточнюючу локацію — наприклад, “Новодмитрівка” та “Білозерський район, Херсонська область”. Цей API вже знає й різні мови, й альтернативні назви. Окрім того, він повертає place_id - унікальний ідентифікатор, який можна зберігати у свою базу та легко за ним фільтрувати.

До речі: цікава гра “Скільки міст ти знаєш?”. Мені подобається, що вона повідомляє, який відсоток населення живе у вказаних тобою містах.