Лучше использовать список пар или два списка? - PullRequest
6 голосов
/ 22 сентября 2009

Я пишу метод, который является частью открытого интерфейса Java-класса. Он широко позволяет вызывающей стороне указывать значения, назначаемые ряду объектов базы данных, поэтому они должны предоставлять как идентификаторы самих объектов, так и значения, назначаемые им.

Я колеблюсь между реализацией этого как List<Pair<Integer, Integer>> или просто двумя List<Integer> аргументами. Оба, очевидно, будут работать , и ни один из них не вызовет проблем с реализацией или эффективностью в моем методе. В любом случае это в основном одна и та же информация (массив 2xn ), только чередующиеся по-разному.

Так что я хотел бы высказать несколько мнений о том, какое из них, по вашему мнению, будет лучше, и почему.

Преимущества списка пар, которые я вижу до сих пор:

  • Более точно отражает фактические отношения между сущностями
  • Устраняет некоторые классы динамических ошибок (например, несоответствующие длины списка)

Преимущества для пары списков:

  • Не полагается ни на какие классы, не относящиеся к JDK (просто, как Pair - концепция)
  • Не требует строительства каких-либо вспомогательных объектов только для переноса данных вокруг
  • В любом случае, вызывающие абоненты чаще имеют аргументы в отдельных списках, поэтому им не нужно перестраивать данные перед вызовом метода

Оба случая имеют одинаковую безопасность типов, а также одинаковую возможность несоответствия аргументов (например, ввод значений первым и идентификаторов секунд, когда это должно быть наоборот). Эту последнюю проблему можно избежать, создав тривиальную обертку вокруг Integer, называемую чем-то вроде PrimaryKey, которая имеет свои плюсы и минусы и в любом случае ортогональна этой проблеме, так как ее можно использовать одинаково в обоих случаях.

Тем не менее, существует золотая середина, которая может быть третьей опцией - тривиальный контейнерный класс с целочисленными полями для objectId и value. Это не требует помощи компилятора в обеспечении правильности объектов посредством ввода, но обеспечивает дополнительный уровень безопасности в назначениях. Я не думаю, что я бы пошел на это, так как мне не нравится идея загрязнения публичного интерфейса таким тривиальным классом, как этот.

Ответы [ 11 ]

0 голосов
/ 22 сентября 2009

По моему мнению, воспользуйтесь списком пар (или вашим собственным более конкретным контейнером), так как это, кажется, наиболее естественно отражает проблему, которую вы решаете. И это только одна переменная для отслеживания и отправки в методы вместо двух.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...