Android - DAO模式

时间:2014-12-02 15:55:32

标签: java android dao

我正在使用DAO模式实现Android应用程序。从阅读中我已经了解了一些原则(比如关于多个数据源的优点)我并不是100%确定我的实现检查了模式的所有主要目标(例如:实现隐藏)。

如果我们需要从视图中完全隐藏实现细节,并且因为我当前正在将应用程序上下文传递给TeamItemDataSource.java的构造函数,我认为这应该重新编写并且我有两个解决方案:其中一个问题我目前正在考虑从TeamIteamDataSource.java扩展SQLiteOpenHelper,但我认为我会遇到麻烦,因为我已经有一个类可以完成这项工作(我将不得不从SQLiteOpenHelper扩展更多的对象)。另一方面,我总是可以传递应用程序上下文,在工厂方法中,我只是调用一个未使用应用程序上下文的潜在未来类的构造函数。

关于实施隐藏的最后一个问题(我假设我对这个概念可能是错的 - 如果是这样我会很感激解释): 在访问数据库的类(TeamItemDataSource.java)中隐藏实现细节的方法是使用包含sql语句的私有或受保护字符串?因为如果所有方法都是公开的,我没有隐藏任何东西。

对于我的应用程序的一个对象(关于足球(非美国的))我有这些课程:

TeamItemDAOFactory.java

    public class TeamItemDAOFactory {

        private final static int SQLite = 1;

        public static TeamItemDAO getTeamItemDAO(Context ctx, int activeDB) {
            TeamItemDAO teamItemDAO;
            switch(activeDB) {
            case SQLite:
                teamItemDAO = new TeamItemDataSource(ctx);
                return teamItemDAO;
            default:
                return null;
            }

        }
    }

TeamItemDAO.java

    public interface TeamItemDAO {

        public ArrayList<TeamItem> getAllTeamsByRanking();

        public void populateDBfromJSON(JSONArray jsonInput) throws SQLiteException;

        public void insertTeam(TeamItem teamItem) throws SQLiteException;

        public void updateTeam(TeamItem teamItem);

        public void deleteTeams();
    }

TeamItemDataSource.java

    public class TeamItemDataSource implements TeamItemDAO {
        private SQLiteDatabase database;
        private CIFDBHelper dbHelper;
        private String[] allColumns = { CIFDBHelper.COLUMN_EQUIPA,
                CIFDBHelper.COLUMN_VITORIAS, CIFDBHelper.COLUMN_EMPATES,
                CIFDBHelper.COLUMN_DERROTAS, CIFDBHelper.COLUMN_PONTOS,
                CIFDBHelper.COLUMN_JOGOS, CIFDBHelper.COLUMN_LUGAR };
        private String TAG = "TeamItemDataSource";

        public TeamItemDataSource(Context context) {
            dbHelper = CIFDBHelper.getInstance(context);
        }

        private void open() throws SQLException {
            database = dbHelper.getWritableDatabase();
        }

        public void close() {
            dbHelper.close();
        }

        public ArrayList<TeamItem> getAllTeamsByRanking() {
            //
        }

        public void populateDBfromJSON(JSONArray jsonInput) throws SQLiteException {
            //
        }

        public void insertTeam(TeamItem teamItem) throws SQLiteException{
            //
        }

        public void updateTeam(TeamItem teamItem) {
            //
        }

        public void deleteTeams() {
            //
        }

        private TeamItem cursorToTeam(Cursor cursor) {
            //
        }
    }

0 个答案:

没有答案