Почему TDataSource был создан первоначально?

O (1): Простой код без циклов. Просто потоки через. Поиски в таблице поиска являются O (1), также.

O (журнал (n)): эффективно оптимизированные алгоритмы. Пример: алгоритмы двоичного дерева и двоичный поиск. Обычно не причиняет боль. Вы удачливы, если у Вас есть такой алгоритм под рукой.

O (n): единственный цикл по данным. Вред для очень большого n.

O (n*log (n)): алгоритм, который делает своего рода деление и завоевывать стратегию. Вред для большого n. Типичный пример: сортировка слиянием

O (n*n): какой-то вложенный цикл. Вред даже с маленьким n. Распространенный с наивными матричными вычислениями. Вы хотите избежать этого вида алгоритма, если Вы можете.

O (n^x для x> 2): злая конструкция с несколькими вложенными циклами. Вред для очень маленького n.

O (x^n, n! и хуже): причудливый (и часто рекурсивный) алгоритмы, которые Вы не хотите иметь в производственном коде кроме очень управляемых случаев для очень маленького n и если действительно нет никакой лучшей альтернативы. Время вычисления может взорваться с n=n+1.

Спущение Вашего алгоритма от более высокого класса сложности может заставить Ваш алгоритм полететь. Думайте о Fourier преобразовании, которое имеет O (n*n) алгоритм, который был неприменим с аппаратными средствами 1960-х кроме редких случаев. Тогда Cooley и Tukey уже сделали некоторые умные сокращения сложности путем многократного использования вычисленных значений. Ведомый к широко распространенному введению FFT в обработку сигналов. И в конце это также, почему Steve Jobs нажил состояние с iPod.

Простой пример: Наивные программисты C пишут этот вид цикла:

for (int cnt=0; cnt < strlen(s) ; cnt++) {
  /* some code */
}

Это - O (n*n) алгоритм из-за реализации strlen (). Вложенные циклы приводят к умножению сложностей в большом-O. O (n) в O (n) дает O (n*n). O (n^3) в O (n) дает O (n^4). В примере, предварительно вычисляя длину строки сразу превратит цикл в O (n). Joel также записал об этом.

все же класс сложности не все. Необходимо следить за размером n. При переделке O (n*log (n)) алгоритм к O (n) не поможет, если количество (теперь линейный) инструкции вырастет в широком масштабе из-за переделки. И если n будет маленьким так или иначе, оптимизация не даст много удара, также.

11
задан Jamo 23 October 2009 в 01:09
поделиться

5 ответов

It все о разъединении и косвенном обращении .

А с TDataSource их два вида:

  • Разделение отношений основных деталей (TDataSource находится в том же модуле, что и TDataSets которые связаны;
12
ответ дан 3 December 2019 в 02:20
поделиться

Вы можете рассматривать это как своего рода паттерн модель-представление-контроллер.

Данные находятся в DataSet (модели), который ничего не знает о том, кто их использует и для чего.
Компоненты, поддерживающие БД, предоставляют различные интерфейсы (представления) для взаимодействия пользователя с этими данными, не зная, кто их хранит.
DataSource - это посредник (контроллер), который обеспечивает связь и отправляет любое изменение данных или команду либо модели, либо представлениям.

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

3
ответ дан 3 December 2019 в 02:20
поделиться

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

Итак, вы могли изменить используемую базу данных, просто изменив один источник данных вместо множества TDBEdits, TDBGrids и т. д.

11
ответ дан 3 December 2019 в 02:20
поделиться
  • TDataSet предназначен для доступа к базе данных.
  • TDataSource касается пользовательских интерфейсов: отключение / включение, синхронизация, поток данных и т. д.

Если вы объедините эти во-вторых, компонент вашей базы данных становится зависимым от конкретной инфраструктуры пользовательского интерфейса, которую вы используете. Подобные зависимости могут быть приемлемы в вашей собственной программе, но не подходят для API, который распространяется среди множества разработчиков.

6
ответ дан 3 December 2019 в 02:20
поделиться

Я не знаю, точно ли это то, о чем думала команда разработчиков, но один из способов, которым это может быть полезно, - это изменение наборов данных. Допустим, у вас есть целый набор элементов управления с учетом данных, и все они привязаны к одному набору данных, а затем вы хотите переключиться на другой. Если все они связаны через посредника, все, что вам нужно сделать, это изменить свойство источника данных .Dataset вместо того, чтобы перебирать все элементы управления и изменять их свойства.

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

1
ответ дан 3 December 2019 в 02:20
поделиться
Другие вопросы по тегам:

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