简介
让我们假设我在我闪闪发光的新店里卖了漂亮的两轮,自行车和摩托车。我喜欢跟踪事情所以我开发了一个Spring应用程序来支持我,以防我忘记了事情......
在这个应用程序中,有一个抽象的Vehicule.java类,它由另外两个Java类扩展,代表我销售的具体对象:
自行车扩展了Vehicule
摩托车扩展了Vehicule
当我实际销售两个轮子时,我会转到应用程序并单击一个按钮,将按钮设置为在DB中销售。
问题
对于JSP,服务和DAO来说,有什么好的Spring设计能够最好地处理从JSP到DAO的继承而不会复制太多东西?
我正在寻找"最佳实践"设计,可伸缩 促进维护。
当前线索
想法1
特定的JSP调用通用Spring Controller的特定方法,该方法调用调用特定DAO并执行操作的特定Spring Service。
我应该为每种产品类型编写不同的JSP吗?自行车JSP和单独的摩托车JSP?每个" setSold"按钮将直接指向正确的服务。
在这种情况下,如果我的各种产品增长会发生什么?我是否需要根据我拥有的产品数量来增加所有产品?
如果我们假设滑板,滚轴,旱冰鞋和汽车,那么类和一些方法的草图将是:
JSP :
- cardetails.jsp
- skateboarddetails.jsp
- rollersdetails.jsp
- rollerskatesdetails.jsp
- bicycledetails.jsp
- motorcycledetails.jsp
控制器:
- @Controller类DetailController.java:
- void setSold(Car car);
- void setSold(Skateboard skateboard);
- void setSold(Rollers rollers);
- void setSold(RollerSkates rollerSkates);
- void setSold(Bicycle bicycle);
- void setSold(MotorCycle motorCycle);
服务:
- @Service类CarService.java
- @Service class SkateboardService.java
- @Service类RollersService.java
- @Service class RollerSkatesService.java
- @Service类BicycleService.java
- @Service class MotorCycleService.java
DAO :
- @Repository类CarDao.java
- @Repository类SkateboardDao.java
- @Repository类RollersDao.java
- @Repository类RollerSkatesDao.java
- @Repository类BicycleDao.java
- @Repository类MotorCycleDao.java
每次添加新产品类型时,列表都会变得更大
创意2
通用JSP调用通用Spring Controller的通用方法,该方法调用标识对象类型的通用Spring Service,然后调用将调用特定DAO并执行操作的特定Spring Service。
我应该编写一个处理任何类型的两轮的通用JSP,然后让服务将请求分派给正确的服务吗?感觉它是最具可扩展性的做事方式,但我无法想出一个适合一切的设计。
找到给定产品的特定服务似乎有点脏,难以维护。我的实验性实现包括将对象类映射到服务或者编写一个大的开关案例,根据对象特征返回正确的spring服务。
但看起来这种结构更清晰,更具可扩展性。如果添加更多产品,则简单类模型将变为:
JSP :
控制器:
- @Controller类DetailController.java:
- setSold(Vehicule vehicule)
服务:
- @Service抽象类VehiculeService.java
- @Service类CarService.java
- @Service class SkateboardService.java
- @Service类RollersService.java
- @Service class RollerSkatesService.java
- @Service类BicycleService.java
- @Service class MotorCycleService.java
DAO :
- @Repository抽象类VehiculeDao.java(摘要)
- @Repository类CarDao.java
- @Repository类SkateboardDao.java
- @Repository类RollersDao.java
- @Repository类RollerSkatesDao.java
- @Repository类BicycleDao.java
- @Repository类MotorCycleDao.java