|
|||||||
Что такое релейшен и скоуп (Relation и Scopes) применительно к объектам данных
Время создания: 03.10.2014 20:37
Автор: Xintrea
Текстовые метки: Relation, Scopes, релейшн, скоуп
Раздел: Компьютер - Программирование - Теория программирования
Запись: xintrea/mytetra_syncro/master/base/1412354274rfwldpgknv/text.html на raw.github.com
|
|||||||
|
|||||||
Note: я пока еще сам толком не разобрался, что такое Scope и Relation. Здесь собираю информацию, которую удалось накопасть в сети. В теории программирования есть две взаимо-противовположные вещи. Обычно термины Релейшен и Скоуп применяются тогда, когда речь идет о моделях данных в парадигме MVC. Релейшен Это когда у известного объекта запрашиваются связанные с ним данные. Например: $posts = $user->posts; Здесь нам известен объект $user, и происходит запрос всех комментариев данного пользователя. Скоуп Часто возникает ситуация, когда стоит задача вытащить данные "в обратку". Например, у нас есть объект списка комментариев Post::model()и нам нужно получить список комментариев для известного пользователя. Тогда скоуп будет выглядеть так: $posts = Post::model()->forUser($user)->findAll(); Вообще, понятие Scoupe очень многогранное. Например вот еще одно объяснение (уже не касаясь парадигмы MVC): Скоп, это некая структура данных, вроде хеш-таблицы, где имена переменных связаны с их значениями. В простейшем случае мы имеем один скоп - глобальный. Например, ты связал с именем а значение 1. Далее оперделил функцию, которая использует эту а. При вызове этой функции твой интерпретатор ищет данное имя в твоем скопе, находит, и «вычисляет», т.е. выдает связанное с ним значение. В реальных современных языках программирования как правило имеется более чем один скоп. Например в языках с поддержкой замыканий свой собственный скоп создается для каждого замыкания, создается неявно, самим интерпретатором. Это лексический скоп. При вызове функции, созданной в замыкании, все имена использованные в теле функции интерпретатор будет искать в первую очередь в этом локальном скопе, в контексте которого была создана данная функция. Аналогично обстоят дела с поддержкой локальных блоков. Существует также понятие динамического скопа. В этом случае, функция при вызове ищет имена своих свободных переменных, т.е. имен использованных в ее теле в скопе того блока кода, в котором вызывается, т.е она не «запоминает» контекст, в котором создавалась. Это называется динамическое связывание. Однако, динамическое связывание сейчас не модно и мало где используется. Из современных немаргинальных языков - только CL(наряду с лексическим), Emacs-lisp, Perl. Но понятие лексический/динамический скоп - это не совсем корректное определение. Скоп он и есть скоп - т.е. таблица ключ - значение. Правильней все таки говорить о связывании - т.е. из какого конкретно скопа функция при вызове тащит свои внутренние имена. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|