Практика кодирования - Какой подход кодирования я должен использовать? - PullRequest
4 голосов
/ 20 декабря 2011

Извините за столь смутное название. Не думал о хорошем.

Положение:

  1. Список объектов пользователя.
  2. Необходимо создать массив для объекта UserInfo.
  3. Объект UserInfo создается на основе информации в объекте User. (В настоящее время есть метод для этого)

Что лучше в такой ситуации?

  1. Должен ли я передать весь список пользователей в метод преобразования UserInfo.
  2. или Должен ли я просмотреть список пользователей, передать каждый объект пользователя в метод преобразования и получить для него UserInfo.

Примеры: * 1 021 *

List<User> users = .....;
UserInfo[] userInfos = getUserInfoFromUser(users); //(conversion method will loop and generate array, then return it.)

или

List<User> users = .....;
UserInfo[] userInfos = new UserInfo[users.size()]
for (int j = 0; j < users.size(); j++) {
    userInfos[j] = getUserInfoFromUser(users.get(j));
}

В первом подходе мы передаем большой объект (список User) в качестве аргумента, а во втором мы вызываем один и тот же метод несколько раз. Что лучше?

Размер списка пользователей будет варьироваться от 25 до 200 объектов в нем.

Ответы [ 6 ]

5 голосов
/ 20 декабря 2011

Как насчет двух методов преобразования, один из которых принимает User и возвращает UserInfo (это может и, вероятно, должно быть конструктором UserInfo), а другой - List , зацикливается и внутренне вызывает первый?

Размер списка не имеет значения.

2 голосов
/ 20 декабря 2011

Я думаю, это зависит от того, как часто вы будете это делать, потому что вы не хотите повторять один и тот же цикл в нескольких местах в вашем коде.

Я бы предложил создать два метода, один из которых возвращаетинформация для одного пользователя и другого, который возвращает информацию для списка пользователей:

public UserInfo[] getInfoForUsers(List<User> users) {
    UserInfo[] userInfos = new UserInfo[users.size()];
    for (int j = 0; j < users.size(); j++) {
        userInfos[j] = getInfoForUser(users.get(j));
    }
    return userInfos;
}

public UserInfo getInfoForUser(User u) {

}
0 голосов
/ 20 декабря 2011

Разницы нет: в первой версии реализация функции будет делать вторую версию.Кроме того, вероятно, хотелось бы иметь функцию User -> UserInfo.

0 голосов
/ 20 декабря 2011

Я бы рекомендовал использовать первый вариант: передать весь массив!

Сокращение количества вызовов функций определенно приносит свои плоды.

0 голосов
/ 20 декабря 2011

В обоих случаях Java передает ссылку на объект.В первом случае это ссылка на коллекцию пользователей, а во втором - на пользователя.

0 голосов
/ 20 декабря 2011

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

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