我想要有关设计的意见和专家意见。
我正在使用JSF2和EJB3开发应用程序,并且不使用CDI。
我从其他团队获得了一个API(jar),其中有三种主要方法。一个人搜索数据库并返回一个汽车列表,一个返回一个推车列表,一个返回船只列表
所以基本上我们有三个不同车辆的不同列表
在用户界面,用户有一个搜索表单,上面有三个单选按钮,用于每种类型的用户想要搜索的车辆,即用于汽车,推车或船的收音机。然后在同一页面上,我们有三个单独的部分全部可见用户可以提供有关搜索内容的详细信息。如果用户想要汽车列表,则可以选择提供注册号或制作模型等,如果用户想要搜索船只输入字段,则提供详细信息船只或码头的名称等。
有一个搜索按钮。现在我想知道如何最好地使用图层来访问这个罐子来打电话并显示结果。以下是我如何接近它
我有一个SearchBean
,它是JSF托管bean。
我有三个类CarSearchRequest
,PushBikeSearchRequest
和BoatSearchRequest
每个类都有一个search()方法。< br />然后我有三个无状态会话bean CarDAO
,PushBikeDAO
和BoatDAO
这些DAO中的每一个都在给定jar中调用方法,例如CarDAO
将调用返回car等的API。上面三个Request类中的每一个都有一个私有默认构造函数,只有公共构造函数将相应的DAO作为参数。
然后在我SearchBean
注入三个DAO(即EJB)和@PostConstruct
方法后,我正在初始化所有三个Request对象并将DAO传递给它们的构造函数。
屏幕上的搜索按钮然后调用searchBean的search()方法,如下所示
public void search()
{
//Vehicle is an enum whose value is selected by radi button
if(this.vehicle.isCar())
{
carRequest.search();
}
else if(this.vehicle.isPushBike())
{
pushBikeRequest.search();
}
//boat checks and calls here ...
}
我讨厌这个,如果在这个搜索中的陈述,一个好的设计不应该需要这个检查 我不确定,但是从请求对象声音反模式调用dao搜索。这是一个很好的方法吗? 我似乎正在创建6个类(3个请求对象和3个DAO),这听起来也不对。因为每个搜索实现都不同,所以似乎不能逃避泛型。
有人可以给我一个更好的方法或任何相关的建议。
答案 0 :(得分:0)
正在使用JSF2和EJB3开发应用程序,我没有使用CDI。
我的建议与CDI有关。你为什么决定不使用它?没有使用CDI,您将失去JEE6在JSF Web开发中提供的两个最基本的新服务:上下文和依赖注入。您可以专门使用EJB 3.1,但最终不会得到最简单的解决方案。如果我需要其他要求,如事务,jmx,池等,我会从CDI开始。然后EJB来救你