Полезна моя идея для объектной библиотеки персистентности?

Во-первых, я приношу извинения, если это не соответствующее место проведения для задавания этого вопроса, но я не был действительно уверен, откуда еще быть введенным.

Я создал раннюю версию библиотеки персистентности объекта.NET. Его функции:

  • Очень простой интерфейс для персистентности POCOs.
  • Главное: поддержка примерно каждого мыслимого носителя. Это было бы всем из файлов простого текста в локальной файловой системе, к встроенным системам как SQLite, любой стандартный SQL-сервер (MySQL, пост-ГРЭС, Oracle, SQL Server, безотносительно), к различным базам данных NoSQL (монго, Диван, Redis, безотносительно). Драйверы могли быть записаны почти для чего-либо, так например, Вы могли довольно легко записать драйвер, где фактическое запоминающее устройство могло быть веб-сервисом.

Когда у меня сначала была эта идея, я был убежден, что это было полностью потрясающим. Я быстро создал начальный прототип. Теперь, я в 'твердой части', где я обсуждаю проблемы как организация пула подключений, потокобезопасность, и дебатирую, попытаться ли поддерживать IQueryable для LINQ, и т.д. И я бросаю более трудный взгляд на то, стоит ли разработать эту библиотеку вне моих собственных требований для него.


Вот основной пример использования:

var to1 = new TestObject { id = "fignewton", number = 100, FruitType = FruitType.Apple };

ObjectStore db = new SQLiteObjectStore("d:/objstore.sqlite");
db.Write(to1);
var readback = db.Read<TestObject>("fignewton");

var readmultiple = db.ReadObjects<TestObject>(collectionOfKeys);

Интерфейс запросов, который работает правильно теперь, похож:

var appleQuery = new Query<TestObject>().Eq("FruitType", FruitType.Apple).Gt("number",50);
var results = db.Find<TestObject>(appleQuery); 

Я также работаю над альтернативным интерфейсом запросов, который позволяет Вам просто передать в чем-то в точности как оператор Where SQL. И очевидно, в СЕТЕВОМ мире было бы замечательно поддерживать IQueryable / деревья выражений.

Поскольку библиотека поддерживает много носителей с разрозненными возможностями, она использует атрибуты, чтобы помочь системе лучше всего использовать каждый драйвер.

[TableName("AttributeTest")]
[CompositeIndex("AutoProperty","CreatedOn")]
public class ComplexTypesObject
{
    [Id]
    public string id;

    [QueryableIndexed]
    public FruitType FruitType;

    public SimpleTypesObject EmbeddedObject;
    public string[] Array;
    public int AutoProperty { get; set; }
    public DateTime CreatedOn = DateTime.Now;
}

Все атрибуты являются дополнительными, и являются в основном всеми о производительности. В простом случае Вам не нужен ни один из них.

В среде SQL система будет по умолчанию заботиться о составлении таблиц и индексов для Вас, хотя существует опция DbaSafe, которая будет препятствовать тому, чтобы система выполнила DDLs.

Это - также забава смочь переместить Ваши данные от, скажем, механизма SQL до MongoDB в одной строке кода. Или к zip-файлу. И назад снова.

Хорошо, вопрос:

Основной вопрос, "Действительно ли это полезно?" Действительно ли это стоит занять время для реальной полировки, сделайте ориентированными на многопотоковое исполнение или соединение объединенный, запишите лучший интерфейс запросов и загрузите где-нибудь?

  • Уже есть ли другая библиотека там, которая уже делает что-то вроде этого, А ИМЕННО, обеспечивая единственный интерфейс, который работает через несколько источников данных (вне просто различных вариантов SQL)?
  • Это решает проблему, которая должна быть решена, или кто-то еще уже решил его лучше?
  • Если я продолжаю двигаться, как Вы идете о попытке сделать Ваш проект видимым?

Очевидно, это не замена для ORMs (и он может сосуществовать с ORMs и сосуществовать с Вашим традиционным SQL-сервером). Я предполагаю, что его основные варианты использования для простой персистентности, где ORM является излишеством, или для сценариев типа NoSQL и где интерфейс типа хранилища документа предпочтителен.

6
задан Ben Eirich 30 June 2010 в 01:06
поделиться

4 ответа

Мой совет: напишите его в соответствии с вашими требованиями, а затем откройте исходный код. Вы скоро узнаете, есть ли на это рынок сбыта. И, в качестве бонуса, вы обнаружите, что другие люди скажут вам, какие биты нуждаются в полировке; очень высока вероятность, что они отшлифуют его для вас.

4
ответ дан 16 December 2019 в 21:34
поделиться

Бен, я думаю, это круто. По крайней мере, опубликуйте его на CodePlex и поделитесь с остальным миром. Я совершенно уверен, что есть разработчики, которые могут использовать фреймворк сохранения объектов (или помочь его усовершенствовать).

2
ответ дан 16 December 2019 в 21:34
поделиться

Какую бы ценность это ни стоило, я считаю, что это отличная идея.

Но что более важно, вы выбрали проект (на мой взгляд), который, несомненно, улучшит вашу конструкцию кода и дизайн. Часто бывает довольно сложно найти проекты, которые одновременно повышают ценность и улучшают ваши навыки.

По крайней мере, доработайте его в соответствии с вашими первоначальными требованиями, а затем откройте исходный код. Все, что после этого, - это бонус!

1
ответ дан 16 December 2019 в 21:34
поделиться

Хотя я думаю, что эта идея интригует и может быть полезна, я не уверен, какую долгосрочную ценность она может иметь. Учитывая значительный прогресс, достигнутый в последнее время с EF v4, включая такие вещи, как Code-Only, настоящая поддержка POCO и т. Д., Достижение того, о чем вы говорите, на самом деле не так уж сложно с EF. В наши дни я искренне верю в Code-Only, поскольку он простой, мощный и, что самое главное, проверяется во время компиляции.

Идея поддержки любого типа хранилища данных интригует, и на нее стоит обратить внимание. Однако я думаю, что это могло бы быть более полезным и охватить значительно более широкую аудиторию, если бы вы реализовали поставщиков хранилищ для EF v4, вместо того, чтобы пытаться заново изобрести колесо, на которое Microsoft потратила годы. Маленькие проекты чаще всего растут ... и такие вещи, как пулы, безопасность потоков, поддержка LINQ / IQueryable и т. Д., Становятся более важными ... постепенно, со временем.

Разрабатывая поставщиков хранилищ данных EF для таких вещей, как SqLite, MongoDB, файлы Xml или плоские файлы и т. Д., Вы расширяете возможности существующей, знакомой, доступной инфраструктуры, не требуя от людей изучения дополнительной.

1
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: