Sto lavorando su un progetto javaFX usando il Hibernate e il database H2 , sto cercando di seguire il concetto di pattern di progettazione MVC, quindi ho creato 3 pacchetti:
-
modelli : contiene classi POJO
2.1 views.fxml : contiene file fxml
2.2. views.controllers : contiene le classi di controller dei file fxml
3 . dao : contiene classi che interagiscono con il database.
Al momento ogni cosa va bene, ma quando ho seguito un tutoriel, ho scoperto che ha aggiunto Livello servizio , questo ha un ruolo per creare oggetti e inviarli al livello DAO , ho creato questo esempio, ma sono confuso se è vero o sono fuori i concetti, questo è il mio esempio:
Modello:
@Entity
@javax.persistence.Table(name = "ENTREPRENEUR")
public class Entrepreneur implements Serializable {
private String Id;
private final StringProperty lastName = new SimpleStringProperty();
private final StringProperty firstName = new SimpleStringProperty();
private final StringProperty email = new SimpleStringProperty();
private final StringProperty password = new SimpleStringProperty();
private final StringProperty category = new SimpleStringProperty();
public Date signDate;
public byte[] picture;
public Set<Corporation> corporations;
public Entrepreneur() {
corporations = new HashSet<>();
}
@OneToMany(mappedBy = "entrepreneur")
public Set<Corporation> getCorporations() {
return corporations;
}
public void setCorporations(Set<Corporation> corporations) {
this.corporations = corporations;
}
@Column(name = "CATEGORY")
private String getCategory() {
return category.get();
}
public void setCategory(String value) {
category.set(value);
}
private StringProperty categoryProperty() {
return category;
}
@Column(name = "PICTURE")
public byte[] getPicture() {
return picture;
}
public void setPicture(byte[] picture) {
this.picture = picture;
}
@Column(name = "SIGN_UP_DATE")
public Date getSignDate() {
return signDate;
}
public final void setSignDate(Date signDate) {
this.signDate = signDate;
}
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "ID", updatable = false, nullable = false)
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
@Column(name = "EMAIL")
public String getEmail() {
return email.get();
}
public final void setEmail(String value) {
email.set(value);
}
public StringProperty emailProperty() {
return email;
}
@Column(name = "PASSWORD")
public String getPassword() {
return password.get();
}
public final void setPassword(String value) {
password.set(value);
}
public StringProperty passwordProperty() {
return password;
}
@Column(name = "FIRST_NAME")
public String getFirstName() {
return firstName.get();
}
public final void setFirstName(String value) {
firstName.set(value);
}
public StringProperty firstNameProperty() {
return firstName;
}
@Column(name = "LAST_NAME")
public String getLastName() {
return lastName.get();
}
public final void setLastName(String value) {
lastName.set(value);
}
public StringProperty lastNameProperty() {
return lastName;
}
public void addCompany(Corporation company) {
if (!corporations.contains(company)) {
corporations.add(company);
}
}
Controller:
@FXML
private void createAccount() throws IOException {
String lastNameValue = lastNameField.getText();
String firstNameValue = firstNameField.getText();
String categoryValue = this.category.getValue();
String emailValue = emailField.getText();
String passwordValue = Security.encrypt(passwordField.getText());
new EntrepreneurServiceImp().create(lastNameValue, firstNameValue, categoryValue, emailValue, passwordValue);
}
Servizio:
public class EntrepreneurServiceImp implements EntrepreneurService {
@Override
public void create(String lastName, String firstName, String category, String email, String password) {
//Create and fill an object
Entrepreneur entrepreneur = new Entrepreneur();
entrepreneur.setLastName(lastName);
entrepreneur.setFirstName(firstName);
entrepreneur.setCategory(category);
entrepreneur.setEmail(email);
entrepreneur.setPassword(password);
entrepreneur.setSignDate(Date.valueOf(LocalDate.now()));
//Send object to DAO layer
new EntrepreneurDao().save(entrepreneur);
}
}
DAO:
public class EntrepreneurDao extends DAO<Entrepreneur> {
@Override
public boolean save(Entrepreneur entrepreneur) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(entrepreneur);
session.getTransaction().commit();
return true;
}
}
Privatamente, creo e riempio l'oggetto in layer controller e chiamo il metodo DAO dal controller , ma ora ho aggiunto Livello di servizio che ha un ruolo solo con gli oggetti, La mia implementazione è vera o no?