我正在開發一個應用程序,我希望爲Android和Blackberry提供這兩個應用程序(將來可能會提供給JavaME)。業務邏輯對於所有平臺都是通用的 - 因此,代碼中的相應層也是如此。針對Android和其他平臺的應用程序之間的邏輯代碼重用:要ContentProvider還是不ContentProvider?
但我也有一個數據層 - 這顯然會與各種平臺不同。我的做法是有一個bean和一個抽象的DataStore類。如果我使用Android的記事本的樣品,它是這樣的:
注豆:
public class Note {
private long id;
private String title;
private String note;
private long created;
private long modified;
//Appropriate constructors
//Getters and Setters
}
數據存儲接口:
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);
}
每個平臺將實現數據存儲接口並根據需要執行持久數據訪問。例如,Android實現會爲此使用SQLite類。
這樣,所有平臺之間的更高層次的「層」將是常見的 - 只要它們不使用任何平臺特定的功能。
問題:
並不上述(部分地)與在Android中ContentProvider
的重疊數據存儲的功能?我想到了各種辦法,使這個「清潔工」,但我不相信任何人:
有我
ContentProvider
也實現了數據存儲接口。 但是,這不是混亂的ContentProvider,更不用說「混搭」了責任嗎?在
ContentProvider
中實現SQLite訪問 - 然後讓DataStore實現「調用」下面的ContentProvider。但是,附加層的開銷如何?另外,我仍然需要直接使用ContentProvider,例如使用Android搜索框架。是不是像在多個圖層中複製相同的功能?上述方法的逆 - 即在DataStore層中實現SQLite;然後讓
ContentProvider
打電話給它。我想不出與以前的方法有什麼不同。
底線是 - 如果不是因爲ContentProvider
- 僅僅是數據存儲層將做工精細而這種設計會使得跨平臺的業務邏輯重用。我無法完全拋棄ContentProviders的唯一原因是Android系統的某些組件希望您將數據公開爲ContentProvider(例如Search)。
如果您在應用中處理過這些問題,我將不勝感激。提前致謝。
編輯:
沒有多少迴應爲止。關於各種平臺之間的代碼重用的任何提示?或者,也許我需要重新提出我的問題? (我很抱歉 - 我是新手,不確定協議是用於提醒的)。
我想說實際的代碼重用程度取決於業務邏輯。我已經開發了一個具有Android,BB和JavaME風格的通訊錄同步應用程序。用戶界面,聯繫人訪問和HTTP層是特定於每個平臺的 - 但核心同步層在代碼中也很常見(作爲JAR庫分發到所有3種風格)。此同步層絕對是應用程序的「批量」(在設計工作量和代碼方面)。 我的觀點是 - 有些情況下業務邏輯是這樣的,代碼重用不僅是可能的,但也是有利的。 – curioustechizen