Как вы можете сказать, существует концептуальная иерархия Group.SubGroup.Page.Location.Value
Это похоже на Tuple
для меня. У вас всегда один и тот же список элементов, верно? Словари хороши, когда у вас есть несколько произвольных пар ключ-значение, но если ключи всегда одинаковы (например, группа, подгруппа, страница и т. Д.), То вам следует рассмотреть кортеж. И поскольку значения, по-видимому, все также известны, может иметь смысл использовать перечисления. Вот пример (с некоторыми дополнительными значениями):
enum Group {
case UCL, LCL, LCP, DDO
}
enum Subgroup {
case SRP, VDP, DealerMicrosite
}
enum Location {
case DealerProfile, ActionRow, VehicleModule
}
typealias GroupData = (group: Group,
subgroup: Subgroup,
page: String,
location: Location,
value = String)
Я использовал String
здесь для компонентов страницы и значения, потому что не ясно, что они так же хорошо определены. Страница, кажется, состоит из группы, подгруппы и третьей части; если эта третья часть перечислима, то вы можете использовать перечисление для этого. То же самое по стоимости, конечно.
После того, как вы это определили, писать о функциях, конвертирующих формат Group.SubGroup.Page.Location.Value
в GroupData
.
, не составит труда.
Если кортежи не имеют смысла для вашего случая, например если вам нужен метод доступа, который возвращает Page
вместо использования отдельной функции, то напишите класс, содержащий те же значения. В любом случае, использование перечислений для известных частей позволит компилятору проверить, что вы всегда используете допустимые имена.