gpt4 book ai didi

android - Android 上的 Couchbase lite - 通用架构?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:59:18 30 4
gpt4 key购买 nike

我们正在使用 couchbase 构建一个项目。在 Android 上,我使用 couchbase lite。通常,我一直在使用关系数据库,因为我是 couchbase 的新手,所以我很难找到“正确”的架构。我确实理解我认为的核心概念,但所有示例和指南似乎都遵循某种简单的设置,它们可以在 Activity 中直接访问数据库。

我更习惯于拥有一些数据库抽象,其中业务逻辑只能看到通过数据库接口(interface)或某些 DAO 或其他东西交付的 POJO DTO。所以我现在已经注释了我的模型类并开始编写一个简单的 OR 映射器,但是使用不同类型的数据、外键等。这非常耗时。

我是不是完全忽略了这里的要点?我无法想象每个人都这样做?我每个人都分别为每个类编写将文档转换为 POJO 模型类的方法吗?或使用 json 解析器来执行此操作(但如果我不想加载外键,这对外键不起作用,是吗)?

很抱歉提出了这么多问题,但我觉得我在这里遗漏了一些明显的东西。谢谢!

最佳答案

将尝试回答您的问题:

Am I completely missing the point here somehow?

没有。您可以将 noSQL CB 视为持久分布式对象缓存。所以它不是 RDBMS。然而,DAO 模式非常适合这个模型……因为您在 DAO 级别和 noSQL 级别处理 DTO/ValueObjects/POJO。

I can't imagine everyone doing it this way?

我建议编写一个可以持久化/检索 POJO 的通用 Couchbase 管理器类。然后您可以在您的 DAO 中重新使用它。

Everyone writing methods that convert Documents to POJO model classes for each class separately? Or using a json parser to do that (But that won't work for foreign keys if I wan't to load them too, does it)?

您可以在 Couchbase 管理器类中使用一个通用代码来执行从 json 到 POJO 的转换。因此,您只使用 POJO,并且在您的应用程序代码中看不到任何 json(在 Couchbase 管理器类之外)这是此类的示例:

public class CouchbaseManager<K, V>
{
private final Class<V> valueTypeParameterClass;

@Inject
private CouchbaseClient cbClient;

@Inject
private Gson gson;

public CouchbaseManager(final Class<V> valueClass)
{
this.valueTypeParameterClass = valueClass;
}

public V get(K key)
{
V res = null;
String jsonValue = null;
if (key != null)
{
jsonValue = (String) cbClient.get(key);
if (jsonValue != null)
{
res = gson.fromJson(jsonValue, valueTypeParameterClass);
}
}
return res;
}

public void put(K key, V value)
{
int ttl = 0;
cbClient.set(key, ttl, gson.toJson(value, valueTypeParameterClass));
}
}

然后在您的 DAO 代码中为每种类型创建 CouchbaseManager 实例:

CouchbaseManager<String,Customer> cbmCustomer = new CouchbaseManager<String,Customer>(Customer.class);

CouchbaseManager<String,Account> cbmAccount = new CouchbaseManager<String,Account>(Account.class);

// and so on for other POJOs you have.
// then get/put operations look simple
Customer cust = cbmCustomer.get("cust-1234");
cust.setName("New Name"); // mutate value
// store changes
cbmCustomer.put(cust.getId(), cust);

现在关于“外键”。请记住它不是 RDBMS,因此您的代码是否具有“外键”的概念。例如,客户类可以有一个帐户的 ID:

Customer cust = cbmCustomer.get("cust-1234");
String accId = cust.getAccountId();
//You can load account
Account acc = cbmAccount.get(accId);

正如您所看到的,这一切都是您自己完成的。我希望它是 JPAJDO Couchbase 的实现/提供者(如 DataNucleusHibernate )

您真的应该从您的 POJO/文档设计开始,尝试将您的 POJO 实体拆分为数据“ block ”,以便在粗粒度 POJO 和细粒度 POJO 之间取得适当的平衡。另见 this discussion on key/document design considerations .

关于android - Android 上的 Couchbase lite - 通用架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898023/

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