我们的作业要写一个web
宠物医院管理系统,因为医生、客户等都包含浏览、添加、删除操作,所以对于service
层,我希望有个统一的接口以供servlet
中的类使用。
开始我是这样定义的:
public interface ServiceManager<T extends PetHospital> {
boolean addOne(T arg);
boolean deleteOne(int id);
List<T> list(int page);
}
这样删除和浏览都没有问题,但是addOne(T arg)
方法会造成在servlet
层的类需要创建Hippiater
等bean
层里面声明的类,感觉这样做好像不太符合分层的设计,但是对于医生、客户、宠物等不同对象需要的参数是不一样的,我该怎么设计addOne
方法来保证servlet
层调用时只需要传这些对象需要的参数,而不是这些对象。
可能描述的不清楚,再解释一下:
我希望在接口里还是要声明addOne
方法,但是能够接收不同参数(个数、类型都不一定),这样在service
层还是可以优雅的实现这个接口。
对象及其属性包含的内容如下:
package bean;
//兽医
class Hippiater {
private int id;//primary key
private String name;//姓名
private int workAge;//医龄
private String speciality;//技能专长
}
//客户
class Customer {
private int id;//primary key
private String name;//姓名
}
//宠物
class Pet {
private int id; //primary key
private int masterId; //所属客户id
private String breed; //品种
private String name; //名字
}
//病历
class Record {
private int id; //primary key
private int petId; //宠物ID
private long recordTime; //病历创建日期
private String diseaseDescribe; //病情描述
}
目录结构如下:
root
+- bean
+- DAO
+- service
`- web
上面的几个类在bean
目录下,ServiceManager
接口位于service
目录下,为web
目录下的类提供服务。
但我觉得应该不能让web
下的类去操作bean
目录下的类的实例,而应该提供其所需参数,交给service
去处理
所有我的问题就是怎么设计我的ServiceManager
接口来满足这个需求
高洛峰2017-04-17 17:51:13
먼저 몇 가지 질문을 드리겠습니다
PetHospital을 상속하기 위해 유형 매개변수 T를 사용합니다. T 유형은 Hippiater, Customer, Pet 등일 수 있습니다. 이 상속 방법은 상속의 "is-A" 의미를 위반합니다. 고객이나 애완동물이 PetHospital이라고 상상해 보십시오.
물론 웹 레이어의 매개변수는 일반적으로 양식에서 오기 때문에 웹은 Bean 레이어의 객체를 이해할 수 있으므로 당연히 양식이 추가할 객체가 무엇인지 알아야 합니다. Struts 또는 Spring의 컨트롤러는 직접 사용되며 양식 매개변수를 Bean 레이어 객체로 캡슐화합니다.
삭제 메소드는 ID만 허용하는데, 어떤 객체를 삭제해야 하는지 어떻게 알 수 있나요? 고객인가요? 아니면 애완동물? 이 둘이 같은 아이디를 가지고 있다면 어떨까요?
제네릭을 사용해야 하는 경우 다음 코드를 참고하세요
으아악