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
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);