我应该为我的实体制作接口吗?

时间:2012-04-01 12:01:12

标签: java java-ee jpa

是否正常/建议为应用程序中的实体创建接口?如果是应该在接口中声明getter / setter还是仅在业务方法中声明?

6 个答案:

答案 0 :(得分:4)

接口用于业务逻辑,它声明了模块的行为或功能。 POJO只是包含数据的对象而不是假设做任何逻辑 - 所以不是。

答案 1 :(得分:2)

如果有意义的话,您可以创建接口:是否会有多个共享相同功能的类(即,它们是否会公开相同的接口)?在这种情况下,您可以创建一个包含这些(业务逻辑)方法的接口。

此外,接口不包含用于跟踪状态的变量,这些变量将是实现接口的类的一部分。具有相同接口的几个类可能以不同的方式实现它,因此不需要在接口中指定变量(因此,getter和setter)。

答案 2 :(得分:1)

界面肯定不应包含getter和setter。接口仅提供您的类可以执行的功能(如果您需要getter / setter - 使用抽象类)。字段通常(当然不总是)只是实现的一部分。

因此,如果您的类只包含数据,则不需要接口

答案 3 :(得分:0)

有人可能会争辩说,使用实体的接口可以用来将客户端与他们处理JPA的事实分离开来。我有时会遇到这样的情况:我需要在持久化实体旁边存在多个派生的非持久性业务对象,这两个实体都共享相同的接口。在这种情况下,我认为这是合适的。但是,当您不必介意交易时,您应该将此类用途限制为仅读取案例。

答案 4 :(得分:0)

请看一下这篇关于“过度使用”接口/实现模式的优秀文章。通常实体bean不遵循这种模式,你会发现这里有一个很好的理由:

http://marekdec.wordpress.com/2011/12/06/explicit-interface-per-class-antipattern/

答案 5 :(得分:0)

嗯,我不认为实体/ pojo作为接口是有意义的,因为实体或pojo具有getter和setter的属性并用于数据。假设您提供了接口及其实现(在实现接口的POJO中),并且您使用对Implementation类的接口引用将其持久化到数据库中。没关系它会被持久化,但是如果你提供另一个实现相同接口的pojo会怎样。它肯定会违反pojo的含义,当然,它会让pojo坚持下去。