Witam
Proszę o code review projektu :) Oczywiście projekt jest w fazie rozwoju...
Wątek przeniesiony 2020-11-06 21:48 z Java przez cerrato.
Witam
Proszę o code review projektu :) Oczywiście projekt jest w fazie rozwoju...
Nie mam czasu aby ogarnąć całość, trochę drobiazgów
@e bbb: Najpierw zajrzałem w testy.
Przynajmniej ten "Projekt do CV Na Programistę" wyróżnia się na plus od innych "Projektów do CV Na Programistę" rozbudowanymi testami
package hotel_app.hotel.address.dto;
import org.junit.jupiter.api.Test;
class AddressDtoTest {
@Test
void getId() {
}
@Test
void getRegionName() {
}
@Test
void getAdressPostalCode() {
}
@Test
void getCity() {
}
@Test
void getStreet() {
}
@Test
void getAdressHouseNumber() {
}
@Test
void getAdressApartmentNumber() {
}
@Test
void setId() {
}
@Test
void setRegionName() {
}
@Test
void setAdressPostalCode() {
}
@Test
void setCity() {
}
@Test
void setStreet() {
}
@Test
void setAdressHouseNumber() {
}
@Test
void setAdressApartmentNumber() {
}
@Test
void testEquals() {
}
@Test
void canEqual() {
}
@Test
void testHashCode() {
}
@Test
void testToString() {
}
}
Nie rozumiem za co odpowiada canEqual() ale podejście "nie ufaj nikomu" i testuj 'preimplementowane' hashCode & equals daje do myslenia.
Testowana klasa AddressDTO
package hotel_app.hotel.dto;
public class AddressDTO {
private String city;
private String street;
private Integer postalCode;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public Integer getPostalCode() {
return postalCode;
}
public void setPostalCode(Integer postalCode) {
this.postalCode = postalCode;
}
}
OK, a teraz pytanie, na czym ma polegać publiczne "review"?
https://github.com/luxus0/hotel/blob/171062808128cfde58bc8c2f098c3e283e583a3d/src/main/java/hotel_app/hotel/service/DeleteReservationDateService.java#L22-L38
Obawiam się, że to nie działa tak, jakbyś oczekiwał.
w tym samym pliku
@AllArgsConstructor
@Service
final class DeleteReservationDateService {
private final ReservationDateRepository reservationDateRepository;
private final Logger log = LoggerFactory.getLogger(DeleteReservationDateService.class);
Zaoszczędzamy 3 linie jawnego konstruktora kosztem 2 linii Lomboka, dla mnie strata czytelności
pozdrawiam, zegnam się z wątkiem.
Generalnie jest słabo. Kod jest niechlujny i niepoprawny. Używasz wysokopoziomowego API (Spring Data), które nie rozumiesz jak działa pod spodem. Nie rozumiem też motywacji za tworzeniem serwisu takiego jak DeleteRoomService
, który umie usunąć encję na 1001 sposobów.
Przykładowo, tego kodu nie rozumiem:
public void delete(Room room) {
roomRepository.delete(room);
if(roomRepository.findAll().isEmpty())
{
log.info("DELETE ROOM: ");
}
else
{
log.error("DON'T DELETE ROOM");
}
}
Porady na przyszłość: spisz sobie funkcje, które ma obsługiwać Twoja aplikacja i dopisz do nich testy. Wywal te logowania. Poczytaj, jaką rolę w aplikacji pełni serwis, a jaką DAO/repozytorium. Poczytaj o architekturze 3-warstwowej, już nie mówię nawet o hexagonie.
Mylace nazwy metod w np. SelectRoomQuery, reszty mi sie nie chce przegladac. Czemu w ogóle piszesz te metody i query do nich?
private final RoomRepository roomRepository;
private final ReadRoomService readRoomService;
private final CreateRoomService createRoomService;
private final UpdateRoomService updateRoomService;
private final DeleteRoomService deleteRoomService;
co sugeruje, że odpowiedzialnośc tego controlera jest zbyt duża, pomyśl jak by to podzielić.
sc = new Scanner(System.in);
to już mnie zdziwiło kompletnie :DDouble priceForNight;
- nie stosuj double do cen, to typ do obliczen liczbach z wartościami po przecinku. Tam może ci jakoś dziwnie zwrocić np. 21,99999999999999999. Zamień na BigDecimal roomRepository.updateById(room.getId());
roomRepository.updateByBeds(room.getBeds());
roomRepository.updateByPersonNumber(room.getPersonNumber());
roomRepository.updateByPriceForNight(room.getPriceForNight());
roomRepository.updateByPrice(room.getPrice());
roomRepository.updateByAvailable(room.getAvailable());
Po prostu zrób: roomRepository.update(room);