#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 будет иметь эти временные данные для меня. Для меня это просто интересный побочный продукт вычисления возвращаемого значения этой функции.