好的,在阅读并深入了解设计模式世界之后,我决定做以下事情并分享我的经验(请参阅我的第一篇文章以解决参考问题)。
对于持久层([5]、[6]、[7] 等),我使用了 Strategy-Pattern,但如果您想在 Google 上搜索,也可以将其称为 DAOFactory-Pattern 。与此相关,我使用了GenericDAO-Pattern,这在“Java Persistence with Hibernate”一书中得到了很好的解释。
Strategy-Pattern 基本上由一个接口组成,在我的例子中称为PersistenceStrategy ,抽象了实际的持久性实现。此外,我有一个服务PersistenceService,它包装了该持久性策略。
public interface PersistenceStrategy {
public void persist(BaseEntity object);
...
}
持久服务:
public class PersistenceService {
private PersistenceStrategy persistenceStrategy;
public void setPersistenceStrategy(PersistenceStrategy strategy) {
this.persistenceStrategy = strategy;
}
public PersistenceStrategy getPersistenceStrategy() {
return this.persistenceStrategy;
}
}
实际的持久性类 [6] 和 [7](例如 PersistenceStrategyHibernate)等实现了这个接口,我将它们声明为 Spring bean。我还将 PersistenceService 声明为 bean。实际的 PersistenceStrategy 是将它们注入 PersistenceService。请注意,这个 bean 定义在 [5] 和 [6] 中的实际持久性实现中,而不是在 webapp 项目 [4] 中。
<bean id="hibernatePersistenceStrategy" class="org.myProject.persistence.relational.HibernatePersistenceStrategy" />
<!-- PersistenceService is instantiated here with the actual persistence strategy implementation -->
<bean id="persistenceService" class="org.myProject.persistence.PersistenceService">
<property name="persistenceStrategy" ref="hibernatePersistenceStrategy"></property>
</bean>
在我的 webapp maven 项目 [4] 中,我参考了实际的持久性实现,例如 [5] 或 [6]。
<dependency>
<groupId>org.myProject</groupId>
<!-- this is where the persistence module is referenced.
if you want to change the type of persistence you can do it here. -->
<artifactId>persistence-relational</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
然后,在我的控制器类中,我可以引用 PersistenceService 和 PersistenceStrategy。
@Controller
public class NewDatasetController {
@Autowired
PersistenceStrategy persistenceStrategy;
@RequestMapping("/")
public String landing() {
...
}
}
在我看来,这些模式非常好。如果你想在这篇文章中添加一些东西,请随意。