2017-07-29 51 views
2

在我的Java Spring应用程序中,我有一个带有方法的DAO类。我想知道哪些访问修饰符使用:protectedpublic春季DAO类的方法 - 保护与公共?

在哪种情况下我们应该使用protected修饰符?我不知道什么时候应该使用protected修饰符,所以我总是使用public。这是正确的方式吗?

+0

我鼓励您查看访问修饰符以及何时使用它们,如同其他普通对象一样,dao类中的方法应该与其他常规对象一样使用https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html如果他们将被其他对象调用,就可以被公开,如果你不想公开一些,然后让他们受到保护或私密,这是完全正常的 – karelss

回答

2

受保护对于DAO并不合适,因为您需要其他包中的方法,而不需要实现DAO的类。因此,公众几乎总是要走。

+0

这不是完全准确 – karelss

+0

@karelss为什么你认为那? – michigan

+0

由于DAO可以继承,您可以定义受保护的方法来帮助操作,也许您可​​以访问Web服务,而不是数据库,并且定义私有或受保护的方法可以帮助您设计诸如验证或服务创建等交叉功能以将其与的funcionality。我认为所有公开的内容都是错误的,因为在某些情况下,可能导致设计不好的界面和开发更大的方法,而且如果你需要定义很多公共方法,也许这个类应该是分裂成两个或更多。 – karelss

3

DAO层主要用于数据库事务。例如:保存,更新,提取等。

现在他们没有任何业务逻辑,因为我们把业务逻辑放在服务层。通常,此服务层在需要执行数据库相关工作时会调用DAO层。

因此,public应该在大多数情况下使用(因为它们从不同的层/包中调用)。

当您确定您只会从相同的包(或子类)进行调用时,受保护很好,但并非总是如此。所以不,protected不建议。

2

对于DAO类,您应该创建一个与Dao方法声明的接口(这显然是公开的)。你的DAO类应该扩展接口。通过这种方式,您的Dao方法将通过接口引用从其他类访问。

这是更好的方法,因为它会很容易测试。您可以提供DAO接口的模拟实现来测试您的代码。您可以在编写实际的DAO类之前执行此操作。如果您使用接口引用变量调用DAO方法,那么您可以更改DAO类,它仍然可以工作,因为您正在更改该类,而不是您调用方法时使用的引用的接口(例如重命名类名称)。

这是一个重要的设计原则,你应该总是尽可能地为接口编写代码。我建议你看this answer来了解你为什么要在DAO中编写接口代码。

在继承的情况下,您应该使用受保护的修饰符。当你想要在包外部时,只有子类应该能够访问你的类的方法和属性。当你需要做某些不应该暴露在公共API中但仍需要被子类覆盖的例子,例如template method pattern