> Skulle AbstractEntity kanske implementera getId() och ta
> ett ID i sin constructor?
Funderade på något liknande men kan tycka att en implementation blir ganska otydlig om vad som är dess id:
public class Person extends AbstractEntity<PersonalNumber> {
public Person(PersonalNumber pn) {
super(pn);
}
}
men det kanske inte är skäl nog...?
...och vill man generera sitt id på så skulle följande implementation kunna exemplifiera det så här:
public class TestEntity extends AbstractEntity<UUID> {
private TestEntity(UUID id) {
super(id);
}
public static TestEntity newInstance() {
return new TestEntity(UUID.randomUUID());
}
}
> Men ni tycker alltså att implementationen av equals är bra, där equals
> returnerar true for id = null på båda objekten?
Detta borde tämligen bara bli ett problem om man låter databasen generera entitetens id genom att likställa PK och ID. I princip tycker jag inte man borde göra detta, dock förstår jag att det är väldigt smidigt.
>
> Ser i så fall hellre att man tar bort final från equals() och hashCode().
Håller inte med. Per definition(och enl. javadoc) så identifieras en entitet av sitt id, detta kan inte garanteras om man släpper på equals.
En av tankarna från början med ramverket var att få hjälp med boilerplate för ddd-driven design på datalagret. Jag kanske är lite fundamentatlistisk men för mig är vikitgt att hålla på dessa principer då jag tror att det i slutändan resulterar i bättre kod.
//Anders
Problemet, efter att ha tänkt lite mer på detta är hur man får det att
lira med JPA eftersom den kräver en default cstr och sen lite magiskt
petar in värdena. Det blir då svårt att på ett vettigt sätt sätta id
fältet.
>> Men ni tycker alltså att implementationen av equals är bra, där equals
>> returnerar true for id = null på båda objekten?
> Detta borde tämligen bara bli ett problem om man låter databasen generera entitetens id genom att likställa PK och ID. I princip tycker jag inte man borde göra detta, dock förstår jag att det är väldigt smidigt.
Håller också med om att detta snarast är att betrakta som en bugg i
entiteten. En bugg som jag för övrigt har i *alla* mina entiteter (men
dock avser fixa).
>> Ser i så fall hellre att man tar bort final från equals() och hashCode().
> Håller inte med. Per definition(och enl. javadoc) så identifieras en entitet av sitt id, detta kan inte garanteras om man släpper på equals.
Men vem är det som ska garantera det? Ser inte att ramverket i varje
situation ska vara garanten. Att ramverket erbjuder en vettig default
tycker jag är bra, men jag är inte lika säker på att aldrig ska
tilllåta en subklass göra det själv.
/niklas
För att förtydliga så håller jag med, två entiteter med ID null ska
inte ge true från equals.
/niklas
//Anders