Hej, mam problem z pewnym modelem. Pisze w Javie ale problem nie dotyczy języka. Mam klasę Job która reprezentuje ogłoszenie o pracę i mam problem z zamodelowaniem kwestii rodzaju umowy oraz wypłaty. Możliwości jest kilka i przedstawię tylko część (pomijam w tym przypadku wszystkie kwestie prawne). Jeśli wybierzemy umowę o dzieło to wypłata powinna być za wykonaną pracę a stawką jest kwota za wykonanie dzieła (np. 500zł). Jeśli wybierzemy zlecenie to pracodawca może wybrać wypłatę za wykonanie zlecenia lub też stawkę godzinową. Jak to teraz zamodelować? Umowa o pracę też może mieć obie możliwości. Aktualnie mam klasę Job która ma wszystkie informacje typu contactPerson, details itd i to są informacje spójne dla wszystkich więc moim zdaniem jest okej, natomiast mam też pole contractType oraz obiekt klasy Salary w którym mam zdefiniowane wszystkie możliwości, mniej więcej coś takiego:
class Salary {
private String salaryType; //Wypłata za godzinę pracy czy za całość zlecenia
private BigDecimal salaryPerHourNet; //Dla wypłaty godzinowej
private BigDecimal salaryPerHourGross; //Dla wypłaty godzinowej
private String workingTime; //Dla wypłaty godzinowej
private String workingTimeUnit; //Dla wypłaty godzinowej
private BigDecimal salaryNet; //Dla wypłaty za całość zlecenia
private BigDecimal salaryGross; //Dla wypłaty za całość zlecenia
}
Pod względem funkcjonalnym to działa bo mając Mongo zapisuje tylko te pola które są wypełnione więc żadnych nulli po stronie bazy nie mam, natomiast wydaje mi się to jakieś mega głupie. Taka kombinacja wszystkiego ze wszystkim. Podobnie wygląda to w DTO z formularza który przychodzi ale tam w pewnym sensie wydaje mi się że jest to okej bo nie wiem czego się spodziewać od osoby która wypełnia formularz, natomiast później w domenie mam wrażenie że można to zrobić znacznie lepiej.
Ktoś ma jakąś lepszą propozycję?