获取两组数据的dao
Dao that retrieves two sets of data
假设我们有一个处理 Vehicles 数据库 table 中的 Vehicles 的应用程序。
所有处理逻辑相同,可用于处理轿车和卡车。
有一个关键点,应用程序将从 DAO 车辆请求,这取决于它可能需要轿车或卡车(不是两者)的过程。
处理这个问题的好方法是什么?
请记住以下几点:
- 向 DAO 方法发送一个参数,说明我们需要哪种类型的数据。
- 将 DAO 设置为 "mode" 以专注于一组特定的数据。
- 每组数据有两个 DAO 实现。也许有一个抽象 DAO 和两个实现。并且service/controller可以使用必要的DAO。
任何人都可以推荐解决方案或评论并推荐以上任何一项吗?
谢谢
因为 dao 可以在多线程环境中被不同的调用使用,所以不要使用 "mode"。它可能导致无效调用。考虑以下步骤:
Thread 1 set dao mode to truck
Thread 2 set dao mode to sedan
Thread 1 read data. It reads sedans instead of trucks
带有一个附加参数(类型)的解决方案是一个很好的解决方案,提取卡车(或轿车)可以成为请求的一部分。
请注意,如果将来可能有更多车辆,则此解决方案不是最佳解决方案。它打破了开闭原则。
此处对 OCP 的简要描述来自 Wikipedia:
software entities … should be open for extension, but closed for
modification.
因此,解决这种情况的最佳方法是拥有一个 Dao 接口和两种不同的 Dao 实现,一种用于轿车,一种用于卡车。如果将来会存在其他车辆,则无需修改现有代码,但只需编写一个新的 class 实现 dao 接口。这保证了开闭原则。
假设我们有一个处理 Vehicles 数据库 table 中的 Vehicles 的应用程序。
所有处理逻辑相同,可用于处理轿车和卡车。
有一个关键点,应用程序将从 DAO 车辆请求,这取决于它可能需要轿车或卡车(不是两者)的过程。
处理这个问题的好方法是什么?
请记住以下几点:
- 向 DAO 方法发送一个参数,说明我们需要哪种类型的数据。
- 将 DAO 设置为 "mode" 以专注于一组特定的数据。
- 每组数据有两个 DAO 实现。也许有一个抽象 DAO 和两个实现。并且service/controller可以使用必要的DAO。
任何人都可以推荐解决方案或评论并推荐以上任何一项吗?
谢谢
因为 dao 可以在多线程环境中被不同的调用使用,所以不要使用 "mode"。它可能导致无效调用。考虑以下步骤:
Thread 1 set dao mode to truck
Thread 2 set dao mode to sedan
Thread 1 read data. It reads sedans instead of trucks
带有一个附加参数(类型)的解决方案是一个很好的解决方案,提取卡车(或轿车)可以成为请求的一部分。
请注意,如果将来可能有更多车辆,则此解决方案不是最佳解决方案。它打破了开闭原则。 此处对 OCP 的简要描述来自 Wikipedia:
software entities … should be open for extension, but closed for modification.
因此,解决这种情况的最佳方法是拥有一个 Dao 接口和两种不同的 Dao 实现,一种用于轿车,一种用于卡车。如果将来会存在其他车辆,则无需修改现有代码,但只需编写一个新的 class 实现 dao 接口。这保证了开闭原则。