在我的模型中,我有两个类Sport
和SportSession
:
@Entity
@Table(name = "sport")
public class Sport implements Serializable {
@Id
@Column(name="sport_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name", nullable = false, unique = true)
private String name;
}
@Entity
@Table(name = "sport_session")
public class SportSession implements Serializable {
@Id
@Column(name="sport_session_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// ...
@ManyToOne
@JoinColumn(name = "sport_id", nullable = false)
private Sport sport;
}
}
使用Thymeleaf,我想做一个允许创建SportSession
的表单
我希望此表单包含一个<select>
字段,其中包含所有体育项目的名称,以便将Sport
与SportSession
相关联。
我的问题是:应该从我的控制器向视图发送何种对象?
我应该创建一个包含所有运动列表的新对象SportSessionForm
,还有一个Sport
成员来存储用户选择的运动吗?
SportSession足以做到这一点吗?那DTO对象怎么样?
简而言之,这种情况下的最佳做法是什么?
谢谢。
答案 0 :(得分:2)
最好为业务层(服务层)的表示层(SportSessionFormBean
)和业务/完整Bean(SportSession
)维护两个单独的Bean。
您需要将表示bean数据(SportSessionFormBean
)转换为Controller类中的Business Bean,然后将其传递给Business Bean Object(SportSession
)到Services层。服务层使用此Business Bean与DAO类进行交互,这些类持久存在或与数据库进行一些事务。
应该从我的控制器向视图发送何种对象? 我应该创建一个包含列表的新对象SportSessionForm 所有运动项目,以及体育成员选择存储运动 用户?
是的,SportSessionFormBean与HTML前端交互。
SportSession足以做到这一点吗?那DTO对象怎么样? 简而言之,这种情况下的最佳做法是什么?
如上所述,不要将表示层数据与业务层(服务层)数据混淆。服务是可重用的组件,它们与多个端点(如控制器或不同的Web服务等)进行交互。