gpt4 book ai didi

java - 命名接口(interface)和实现并将它们放入包中的良好实践

转载 作者:行者123 更新时间:2023-12-04 06:24:28 25 4
gpt4 key购买 nike

我主要是在谈论 Java 和经典的 OOP。假设我使用的是 DAO 模式。所以我创建了 CustomerDao、AccountDao 等接口(interface)。然后我会将其放入 org.example.dao 包中:

org.example.dao.CustomerDao
org.example.dao.AccountDao
...

到目前为止,这一切对我来说似乎都很好。然后我为这些接口(interface)创建实现。这是我的第一个问题: 我如何命名它们 ?我见过的一种做法是使用 *Impl 后缀,如 CustomerDaoImpl。或者名称应该反射(reflect)实现的性质,例如AccountDatabaseDao 还是 DatabaseBasedAccountDao?或者可能名称应该保持不变,然后包将描述这些实现的性质?如果您建议一种或另一种方式,那么这些实现应该放在哪里?一个单独的包(什么命名逻辑?)还是同一个包?

最佳答案

有两个阵营:功能命名和技术命名。

一个喜欢:

org.example.customer
org.example.account

另一个喜欢:
org.example.dao
org.example.service

我个人喜欢将接口(interface)和实现放在一个地方,只公开接口(interface)并按功能打包,因为包以这种方式具有更高的凝聚力。

随着大小的增加,您仍然可以将包拆分为例如 org.example.customer.dao , org.example.customer.serviceorg.example.customer.ui . (技术上这与 org.example.dao.customer.daoorg.example.service.customerorg.example.ui.customer 相同,因为 Java 包没有嵌套。)

对于您的示例,我将从:
org.example.customer.CustomerDao
org.example.customer.DatabaseCustomerDao (package private)
org.example.account.AccountDao
org.example.account.DatabaseAccountDao (package private)

要使实现包私有(private),您需要一个工厂来创建实例。如果您使用的是 DI。 DI 框架为您实现工厂,您可以将实例注入(inject)仅依赖于接口(interface)契约的用户类中。

关于java - 命名接口(interface)和实现并将它们放入包中的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com