Во-первых, и в качестве общего правила в любое время вы строите «подключаемую» уровень абстракции, строить его поддерживать по крайней мере два реальных реализаций, чтобы начать. Не создавайте его только для одного хранилища данных и старайтесь сделать его абстрагированным, потому что вы не заметите деталей, которые не будут хорошо подключены к другой реализации. Заставив его использовать две отдельные реализации, вы приблизитесь к чему-то, что на самом деле является гибким, но вам нужно будет внести дальнейшие изменения в поддержку третьего и четвертого хранилищ данных.
Во-вторых, не беспокойтесь, эти вещи уже существуют. Microsoft предоставила тонну для своих технологий (ODBC, ADO, ADO.NET и т. Д.), И я уверен, что Ruby/Java/etc также имеет несколько. Я понимаю желание инкапсулировать уже существующую технологию, но чем больше хранилищ данных вам нужно поддерживать, тем больше сложностей вам необходимо собрать, и чем ближе вы будете к ADO.NET (или аналогичным технологиям). Такие компании, как MS, потратили тонну денег и исследования на решение этой точной проблемы, и именно это они придумали.
Да, с большим энтузиазмом, страстью и самоотверженностью; потому что вам понадобятся все три :) Удачи. –
@ Zubair: Это монументальная задача, чтобы создать нечто, что даже смутно полезно. – skaffman
@ skaffman - Как вы определяете «смутно полезный»? Какие функции вы видите? – Zubair