LINUX.ORG.RU

[Java] Пару идеологических вопросов.

 


0

0

Вот постигая философию Java у меня возникло пару вопросов, на которые вопросы на которые не могу себе однозначно ответить. Вот и прошу бородачей помочь.

1) Нужен ли объекту публичный метод load? Мне кажется что вполне достаточно конструктора.

2) Представим что есть класс User:
class User {
private String name;

public String getName() {
// ...
}

public void setName(String name) {
// ...
}
}

И меня мучают сомнения нужно ли возвращать/присваивать ссылку или копию объекта, на который ссылается свойство name.

★★★★★

>И меня мучают сомнения нужно ли возвращать/присваивать ссылку или копию объекта, на который ссылается свойство name.

String - immutable объект. Это значит, что клонировать его бессмысленно. А вот изменяемые объекты типа java.util.Calendar неплохо бы клонировать. На эту тему много писал Joshua Bloch в Effective Java.

>Нужен ли объекту публичный метод load? Мне кажется что вполне достаточно конструктора.

Конструктор (ИМХО) нужен для атомарных сущностей таких как гипотетический класс PhoneNumber. Для составных классов с кучей полей надо оставить конструктор без параметров.

Absurd ★★★
()
Ответ на: комментарий от Absurd

> На эту тему много писал Joshua Bloch в Effective Java.
Спасибо за наводку.

> Для составных классов с кучей полей надо оставить конструктор без параметров.

Ну все равно, если я создаю практически все объекты на основе данных из БД, по ID то код, в данном случае, будет примерно таким:
User user = new User();
user.load(someId);
А без load ведь красивше:
User user = new User(someId);

urxvt ★★★★★
() автор топика
Ответ на: комментарий от urxvt

>Ну все равно, если я создаю практически все объекты на основе данных из БД, по ID то код, в данном случае, будет примерно таким:

>А без load ведь красивше:

Это сейчас в основном через рантаймовые аннотации и рефлексию делается. Недефолные конструкторы для составных объектов это первый аттрибут жабского нуба.

Absurd ★★★
()
Ответ на: комментарий от BreadFan

Уже заказал ее. Уговорили :)

urxvt ★★★★★
() автор топика
Ответ на: комментарий от Absurd

Ну я и есть нуб, кроме хелловорлда ничего не написал пока.

> Это сейчас в основном через рантаймовые аннотации и рефлексию делается. А вот тут пока ни слова не понял.

urxvt ★★★★★
() автор топика
Ответ на: комментарий от urxvt

>Ну все равно, если я создаю практически все объекты на основе данных из БД, по ID то код, в данном случае, будет примерно таким...

Код при создании юзверя из базы будет немного другим:

User u = sess.load(User.class, someId);

Nagwal ★★★★
()
Ответ на: комментарий от urxvt

> Это сейчас в основном через рантаймовые аннотации и рефлексию делается. А вот тут пока ни слова не понял.

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

Nagwal ★★★★
()
Ответ на: комментарий от urxvt

>> Это сейчас в основном через рантаймовые аннотации и рефлексию делается.

> А вот тут пока ни слова не понял.

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

З.Ы. но вообще конечно это полезно.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

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

Спасибо всем за помощь.

urxvt ★★★★★
() автор топика
Ответ на: комментарий от urxvt

>А вот тут пока ни слова не понял.

если не хочется забивать голову конфигами итп, а просто писать, настоятельно рекомендую посмотреть grails, а именно есть ORM под названием GORM.

thevery ★★★★
()
Ответ на: комментарий от thevery

Ок. Спасибо, посмотрим.

urxvt ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.