在我的Java Spring应用程序中,我有一个带有方法的DAO类。我想知道哪些访问修饰符使用:protected
或public
?春季DAO类的方法 - 保护与公共?
在哪种情况下我们应该使用protected
修饰符?我不知道什么时候应该使用protected
修饰符,所以我总是使用public
。这是正确的方式吗?
在我的Java Spring应用程序中,我有一个带有方法的DAO类。我想知道哪些访问修饰符使用:protected
或public
?春季DAO类的方法 - 保护与公共?
在哪种情况下我们应该使用protected
修饰符?我不知道什么时候应该使用protected
修饰符,所以我总是使用public
。这是正确的方式吗?
DAO层主要用于数据库事务。例如:保存,更新,提取等。
现在他们没有任何业务逻辑,因为我们把业务逻辑放在服务层。通常,此服务层在需要执行数据库相关工作时会调用DAO层。
因此,public
应该在大多数情况下使用(因为它们从不同的层/包中调用)。
当您确定您只会从相同的包(或子类)进行调用时,受保护很好,但并非总是如此。所以不,protected
不建议。
对于DAO类,您应该创建一个与Dao方法声明的接口(这显然是公开的)。你的DAO类应该扩展接口。通过这种方式,您的Dao方法将通过接口引用从其他类访问。
这是更好的方法,因为它会很容易测试。您可以提供DAO接口的模拟实现来测试您的代码。您可以在编写实际的DAO类之前执行此操作。如果您使用接口引用变量调用DAO方法,那么您可以更改DAO类,它仍然可以工作,因为您正在更改该类,而不是您调用方法时使用的引用的接口(例如重命名类名称)。
这是一个重要的设计原则,你应该总是尽可能地为接口编写代码。我建议你看this answer来了解你为什么要在DAO中编写接口代码。
在继承的情况下,您应该使用受保护的修饰符。当你想要在包外部时,只有子类应该能够访问你的类的方法和属性。当你需要做某些不应该暴露在公共API中但仍需要被子类覆盖的例子,例如template method pattern。
我鼓励您查看访问修饰符以及何时使用它们,如同其他普通对象一样,dao类中的方法应该与其他常规对象一样使用https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html如果他们将被其他对象调用,就可以被公开,如果你不想公开一些,然后让他们受到保护或私密,这是完全正常的 – karelss