Должно ли это быть членом класса?

#java #coding-style

#java #стиль кодирования

Вопрос:

Класс реализует общедоступную функцию, которая вычисляет некоторое значение. Во время вычисления функция создает временные данные, которые я также хочу получить.

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

 class A {
    TempData member;
    ...
    public Output function(Input input) {
        // calculate return value and save temp data to member
    }
}
  

против.

 class B {
    ...
    public Output function(Input input, TempData fillme) {
        // calculate return value and save temp data to fillme
    }
}
  

Моя проблема: обе версии кажутся мне неправильными. Временные данные на самом деле не принадлежат классу A, а функция с дополнительным параметром — классу B, я не знаю…

Есть ли другое решение? Если нет, то какой из этих двух вы бы выбрали и почему?

Комментарии:

1. Существует ли соотношение 1-1 между вычислением и временными данными?

Ответ №1:

Похоже, вы боретесь с проблемой функции с несколькими выводами. Лучшее решение — создать отдельный класс, который представляет возвращаемое значение этой функции и содержит ваши объекты Output и TempData. Затем вы можете чисто вернуть экземпляр этого класса.

Комментарии:

1. да, ваш метод должен возвращать Output , который будет агрегировать TempData член класса

Ответ №2:

Исходя из этого, действительно сложно, если не невозможно, сказать. Вы должны спросить себя, что это за объект.

Итак, «TempData» — это какая-то особенность вашего класса A? Если у вас есть объект A, ожидаете ли вы, что он сможет сообщить вам, что такое «TempData»? Тогда это должно быть членом. Вероятно, это больше связано с дизайном OO, чем с вашей текущей ситуацией, особенно с классами, называемыми ‘A’

Комментарии:

1. Это моя главная проблема: я бы не ожидал, что объект A будет иметь эти временные данные для меня. Для меня это просто интересный побочный продукт вычисления возвращаемого значения этой функции.