gpt4 book ai didi

java - 不同的数据库库具有不同风格的相同方法最佳实践?

转载 作者:行者123 更新时间:2023-12-01 10:52:23 26 4
gpt4 key购买 nike

我的 Androdi 应用程序中有两个不同的偏好,它们应该使用不同的 SQL 实现。一次使用:

android.database.sqlite.SQLiteDatabase

第二个:

net.sqlcipher.database.SQLiteDatabase

我有这样的方法:

getAll(SQLiteDatabase conn)

我应该如何解决这种情况以避免复制和粘贴?最好的做法是什么?我有几个想法:第一个(最糟糕的是大量复制粘贴)是提供不同的方法:

 getAll(android.database.sqlite.SQLiteDatabase conn)
getAll(net.sqlcipher.database.SQLiteDatabase conn)

第二个是将这个类与其他类型一起包装,导入适当的数据库(聚合、组合作为 SQLiteDatabase 是最终的):

import android.database.sqlite.SQLiteDatabase;
public class SQLliteDatabaseFlavoured {
SQLiteDatabase sqLiteDatabase;
}

使用情况:

getAll(SQLliteDatabaseFlavoured.SQLiteDatabase conn)

最佳答案

如果您使用的是 Android Studio,则可以使用 gradle buildVariant

flavor1 -> packagename: com.example.flavor1 
flavor2 -> packagename: com.example.flavor2

在你的 gradle 脚本中使用它:

filter{
String line -> line.replaceAll("<complete line of regular expression>",
"<complete line of modified expression>")
}

How to replace a string for a buildvariant with gradle in android studio?

如果没有,并且您担心应用程序占用空间,或者您想确保仅在需要时才包含密码库,那么您应该选择选项#2,以便编译器删除未使用的库。选项 1 将始终包含这两个库,这是不必要的。此外,如果您更改实现(出现了另一个 SQLite 产品),选项 #2 将为您提供更大的灵 active 。

从“最佳实践”的角度来看,您应该考虑维护和调试。您的第一个选项可以保证您准确地知道哪个库导致了问题。否则,必须非常清楚正在使用哪种风格,或者当您收到错误报告时始终会提供完整的堆栈跟踪。如果您假设这两个库以完全相同的方式实现,那么如果您得到的只是带有行号或较少信息的错误,那么执行上述任一操作时您将面临一场测试噩梦。即使有完整的堆栈跟踪,调试问题也可能很困难,而且对于项目的新人来说当然也不明显。此外,从最佳实践的角度来看,理想情况下,您根本不会更改这种类型的依赖关系。但我知道这可能是不可能的。

关于java - 不同的数据库库具有不同风格的相同方法最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33781023/

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