gpt4 book ai didi

android - Android与其他平台应用逻辑代码复用 : To ContentProvider or not to ContentProvider?

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:23 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我希望它同时适用于 Android 和 Blackberry(将来可能适用于 JavaME)。业务逻辑对所有平台都是通用的 - 因此,代码中的相应层也是如此。

但我也有一个数据层——这显然会因各种平台而异。我的方法是拥有一个 bean 和一个抽象的 DataStore 类。如果我使用的是 Android 的记事本示例,它会是这样的:

笔记 bean :

public class Note {
private long id;
private String title;
private String note;
private long created;
private long modified;

//Appropriate constructors
//Getters and Setters
}

DataStore 接口(interface):

public interface NoteDataStore {
public boolean deleteNote(long noteId);
public boolean addNote(Note note);
public List<Note> listNotes();
public boolean editNote(long noteId, Note note);
public List<Note> search(String searchString);
}

每个平台都会实现数据存储接口(interface)并根据需要执行持久数据访问。例如,Android 实现会为此目的使用 SQLite 类。

这样,更高级别的“层”将在所有平台之间通用 - 只要它们不使用任何特定于平台的功能。

问题:

上述 DataStore 的功能是否(部分)与 Android 中的 ContentProvider 重叠?我想到了各种方法来使这个“更清洁”,但我不相信其中任何一个:

  • 让我的 ContentProvider 也实现 DataStore 接口(interface)。但是,这不会使 ContentProvider 变得困惑,更不用说“混淆”职责了吗?

  • ContentProvider 中实现 SQLite 访问 - 然后让 DataStore 实现在幕后“调用”ContentProvider。但是,附加层的开销又如何呢?另外,我仍然需要直接使用 ContentProvider,例如使用 Android 搜索框架。这不是像在多层中复制相同的功能吗?

  • 与上述方法相反 - 即,在 DataStore 层中实现 SQLite;然后让 ContentProvider 在幕后调用它。我想不出这与以前的方法有何不同。

底线是 - 如果不是 ContentProvider - 只有 DataStore 层可以正常工作,这种设计将使业务逻辑可跨平台重用。我不能完全放弃 ContentProvider 的唯一原因是 Android 系统的某些组件希望您将数据公开为 ContentProvider(例如搜索)。

对于您如何在您的应用中处理此问题的任何提示,我将不胜感激。提前致谢。

编辑:

到目前为止没有多少回应。关于各种平台之间代码重用的任何提示?或许,我需要重新表述我的问题? (对不起 - 我是 SO 的新手。不确定“提醒”的协议(protocol)是什么)。

最佳答案

The business logic will be common to all the platforms - and hence, so will the corresponding layer in code.

您的绝大部分代码在 Android 和其他版本之间会有所不同。 Blackberry 和 J2ME 与 Android 共享几十个类,主要在 java.iojava.util 中。甚至您的“业务逻辑”也很可能需要三个类库交集之外的类。

因此,我一点也不担心尝试拥有一个通用代码库。通用设计,当然。当然,可互换的数据模型。实际的文字代码,不值得担心,恕我直言。

Doesn't the functionality of the DataStore above (partially) overlap with that of the ContentProvider in Android?

API 在操作方面有重叠。就是这样。

The only reason I cannot entirely discard the ContentProviders is certain components of the Android system expect you to expose data as a ContentProvider (Search, for example).

没错,但在那些情况下,“Android 系统”无论如何都不会支持您的数据模型。例如,搜索需要一个相当具体的 ContentProvider 实现,而不仅仅是任何旧的实现。

关于android - Android与其他平台应用逻辑代码复用 : To ContentProvider or not to ContentProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636050/

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