在我的Java Spring应用程序中,我有一个带方法的DAO类。我想知道哪个访问修饰符使用:protected
或public
?
在哪种情况下我们应该使用protected
修饰符?我不知道何时应该使用protected
修饰符,所以我总是使用public
。这是正确的方式吗?
答案 0 :(得分:3)
DAO层主要用于数据库事务。例如:保存,更新,提取等
现在他们没有任何业务逻辑,因为我们将业务逻辑放在服务层中。通常,只要需要执行与数据库相关的工作,此服务层就会调用DAO层。
因此,public
应该在大多数情况下使用(因为它们是从不同的层/包中调用的)。
当您确定只能从同一个包(或子类)进行调用时,受保护是好的,但情况可能并非总是如此。所以不,不推荐protected
。
答案 1 :(得分:2)
受保护对DAO没有任何意义,因为您需要其他包中的方法,在不实现DAO的类中。因此,公众几乎总是可以走的路。
答案 2 :(得分:2)
对于DAO类,您应该使用声明的Dao方法创建一个接口(显然是公共的)。您的DAO类应该扩展接口。这样,您的Dao方法将通过接口引用从其他类访问。
这是更好的方法,因为它很容易测试。您可以提供DAO接口的模拟实现来测试代码。您可以在编写实际的DAO类之前执行此操作。如果您使用接口引用变量调用DAO方法,那么您可以更改DAO类,它仍然可以工作,因为您正在更改类而不是用于调用方法的引用的接口(为示例重命名类名)。
重要的设计原则是你应该尽可能地为接口编码。我建议您查看this answer以了解为什么要在DAO中编写接口代码。
在继承的情况下,您应该使用protected modifier。当你想在包外面时,只有子类应该能够访问你的类的方法和属性。当你需要做一些不应该在公共API中公开但仍需要被子类覆盖的东西时,例如template method pattern。