Можно ли иметь код проверки типа при работе с базами данных?

Недавно изучаем Haskell, так что здесь рекурсивное решение.

static IEnumerable<string> SplitByPair(string input, char[] delimiter)
{
    var sep1 = input.IndexOfAny(delimiter);
    if (sep1 == -1)
    {
        yield break;
    }
    var sep2 = input.IndexOfAny(delimiter, sep1 + 1);
    if (sep2 == -1)
    {
        yield return input;
    }
    else
    {
        yield return input.Substring(0, sep2);
        foreach (var other in SplitByPair(input.Substring(sep1 + 1), delimiter))
        {
            yield return other;
        }
    }
}

Хорошие вещи:

  • Лень
  • Легко распространяться на другие условия и другие типы данных. Тем не менее, это немного сложно в C #, потому что C # не хватает списка List.span и шаблона Haskell.
3
задан jax 19 January 2019 в 09:19
поделиться

1 ответ

Вы столкнулись с несоответствием объектно-реляционного импеданса из-за отображения между не полностью совместимыми системами. Поскольку наследование между таблицами в реляционной модели невозможно, вам придется пожертвовать чем-то в объектной модели, которая использует наследование. Будут крайние случаи независимо от того, что вы делаете, если вы не переключитесь на объектную базу данных .

Если вы определяете пользовательские операции CRUD в классах, которые расширяют Metric, загрузка энтитов может быть сложной. Что именно будет загружено Metric.get(id), если каждая таблица имеет свою собственную последовательность PK, и оба Rating и Quantity могут иметь одинаковое числовое значение PK.

Вы можете посмотреть, как JPA решает эту проблему. Он использует пользовательские аннотации, например @MappedSuperclass и @Entity. Я предполагаю, что это форма проверки типов.

0
ответ дан Karol Dowbecki 19 January 2019 в 09:19
поделиться
Другие вопросы по тегам:

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