Всем привет.
Возник вопрос. Как лучше называть поля класса, замапленного через Hibernate? Осмысленно или так же, как и поля таблицы?
Например:
Есть таблица атрибутов:
create table ATRS (
ATRS_ID int not null,
ATRS_NM varchar(64) not null,
constraint PK_ATRS PRIMARY KEY CLUSTERED ( ATRS_ID )
)
Какой класс маппинга лучше написать, такой:
public class Attribute {
/**
* Код поля
*/
private Integer id;
/**
* Имя поля
*/
private String name;
...
}
или такой:
public class Attribute {
/**
* Код поля
*/
private Integer atrs_id;
/**
* Имя поля
*/
private String atrs_nm;
...
}
Какие мысли на этот счет?
27.10.06 15:21: Перенесено модератором из 'Java' — Blazkowicz
Здравствуйте, Michael_Y, Вы писали:
M_Y> Всем привет.
M_Y> Возник вопрос. Как лучше называть поля класса, замапленного через Hibernate? Осмысленно или так же, как и поля таблицы?
M_Y> Например:
M_Y>Есть таблица атрибутов:
M_Y>M_Y>create table ATRS (
M_Y> ATRS_ID int not null,
M_Y> ATRS_NM varchar(64) not null,
M_Y> constraint PK_ATRS PRIMARY KEY CLUSTERED ( ATRS_ID )
M_Y>)
M_Y>
M_Y>Какой класс маппинга лучше написать, такой:
M_Y>M_Y>public class Attribute {
M_Y> private Integer id;
M_Y> private String name;
M_Y>}
M_Y>
M_Y>или такой:
M_Y>M_Y>public class Attribute {
M_Y> private Integer atrs_id;
M_Y> private String atrs_nm;
M_Y>}
M_Y>
M_Y> Какие мысли на этот счет?
Второй вариант плох по таким соображениям:
1. Вам придется "_" переносить в геттеры и сеттеры, соответственно они будут встречаться еще где-либо по коду, что есть плохо. Наконец, просто противоречит сановским соглашениям, хотя вы можете их и не использовать, в таком случае, второй вариант подходит.
2. Если же геттеры будут иметь вид "getAtrsId()", плохо плослеживается связь — пробовал раз так сделать, чертыхался долго потом.
Имхо, оптимальным вариантом было бы
create table ATRS (
ID int not null,
NM varchar(64) not null,
constraint PK_ATRS PRIMARY KEY CLUSTERED ( ATRS_ID )
)
public class Attribute {
private Integer id;
private String name;
}
поскольку я не вижу необходимости дублировать название таблицы в названии поля.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Michael_Y, Вы писали:
M_Y> Всем привет.
M_Y> Возник вопрос. Как лучше называть поля класса, замапленного через Hibernate? Осмысленно или так же, как и поля таблицы?
Осмысленно. Впрочем, поля таблицы тоже желательно называть осмысленно.
Здравствуйте, JFreeM, Вы писали:
JFM>поскольку я не вижу необходимости дублировать название таблицы в названии поля.
Есть таки один аргумент в пользу использования названия таблицы в имени identity поля. Таблицы удобней джойнить когда у полей одинаковые имена, т.е. имхо такой вариант удобней и меньше подвержен ошибкам
select * from Orders ord join OrderProducts opr on ord.OrderID = opr.OrderID
чем
select * from Orders ord join OrderProducts opr on ord.ID = opr.OrderID
Здравствуйте, MaximVK, Вы писали:
MVK>Здравствуйте, JFreeM, Вы писали:
JFM>>поскольку я не вижу необходимости дублировать название таблицы в названии поля.
MVK>Есть таки один аргумент в пользу использования названия таблицы в имени identity поля. Таблицы удобней джойнить когда у полей одинаковые имена, т.е. имхо такой вариант удобней и меньше подвержен ошибкам
MVK>select * from Orders ord join OrderProducts opr on ord.OrderID = opr.OrderID
чем select * from Orders ord join OrderProducts opr on ord.ID = opr.OrderID
Это субъективно. Мне больше нравится второй вариант потому что сразу видно где первичный ключ, а где внешний. Кроме того, "правило одинаковых имен" невозможно применить, когда между двумя таблицами есть больше одной связи. В этом случае
select * from Orders ord join OrderProducts opr on ord.OrderID = opr.PrimaryOrderID
и
select * from Orders ord join OrderProducts opr on ord.OrderID = opr.SecondaryOrderID
не более удобен и не менее подвержен ошибкам чем
select * from Orders ord join OrderProducts opr on ord.ID = opr.PrimaryOrderID
и
select * from Orders ord join OrderProducts opr on ord.ID = opr.SecondaryOrderID