Re[14]: Взаимодействие с Базой Данных из C# по схеме MS
От: Cyberax Марс  
Дата: 28.11.08 01:27
Оценка:
Здравствуйте, IB, Вы писали:

IB>Именно... Фишка-то ровно в том, что если присмотреться к типичному приложению, которое активно использует БД, то там процентов 90-95 работы — это отчеты. Список товаров в заказе — отчет, история заказов — отчет, адреса доставки — отчет, ect...

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

ST>>Однако, ситуация меняется, когда данные нужно обрабатывать, то есть когда выделяются такие вот сущности типа Customer->Orders->OrderItems->Product->Vendor... ->Region, и эти сущности нужно редактировать, передавать их как параметры,

IB>О! Вот именно в таких сценариях, каждый лишний метод в данных — повод к геморрою.
Где ты тут увидел методы, кстати?

ST>> А если к этому нужно добавить и пользовательский интерфейс соответсвующий, и валидацию ввода, и метаданные, и еще чего-нибудь... К данным это добавить тяжелее. Согласитесь.

IB>Так именно об этом я и толкую. Добавлять этот функционал нужно не к данным, а к внешним сервисам.
Угу, и получить помойку сервисов.
Sapienti sat!
Re[15]: Взаимодействие с Базой Данных из C# по схеме MS
От: Aikin Беларусь kavaleu.ru
Дата: 28.11.08 09:44
Оценка:
Здравствуйте, Gaperton, Вы писали:

Gaperton, а можно где нить об этом почитать? На уровне "программиста-домохозяйки".
Тема очень интересная, но я в ней ни бум-бум.

СУВ, Aikin
Re[15]: Взаимодействие с Базой Данных из C# по схеме MS
От: IB Австрия http://rsdn.ru
Дата: 28.11.08 10:38
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Это как раз не отчёты.

Именно что отчеты, в чистом виде.

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

Не реализуется, потому что эти связи там лишние.

C>Где ты тут увидел методы, кстати?

Я не увидел, я говорю, что они там не нужны.

C>Угу, и получить помойку сервисов.

Счегобыс?
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Re[16]: Взаимодействие с Базой Данных из C# по схеме MS
От: Gaperton http://gaperton.livejournal.com
Дата: 28.11.08 11:05
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Gaperton, а можно где нить об этом почитать? На уровне "программиста-домохозяйки".

A>Тема очень интересная, но я в ней ни бум-бум.

Можно, но источник неожиданный, и вынести знакомство с ним без повреждения мозга способен не каждый. Посмотри, как устроено 1С:Предприятие 8, модуль торговля+склад или как он там называется. Там вся база делается на трех классах объектов — справочник (статический объект), документ (соответствует действию, имеет время и может двигать "регистры"), "регистр" (похоже на OLAP-звезду, по нему можно строить отчеты и снимать с него в реальном времени, скажем, остатки). Бухгалтерию и все остальное смотреть не надо — это мимо. Потом — найди сайт CouchDB, и прикинь, как туда ляжет модель "справочник-документ-отчет".
Re[17]: Взаимодействие с Базой Данных из C# по схеме MS
От: Aikin Беларусь kavaleu.ru
Дата: 28.11.08 11:17
Оценка:
Здравствуйте, Gaperton, Вы писали:

G> Посмотри, как устроено 1С:Предприятие 8, модуль торговля+склад или как он там называется. Там вся база делается на трех классах объектов — справочник (статический объект), документ (соответствует действию, имеет время и может двигать "регистры"), "регистр" (похоже на OLAP-звезду, по нему можно строить отчеты и снимать с него в реальном времени, скажем, остатки).

Занятно. Спасибо, посмотрю.
...
Залез в Гугл -- инет забит рекламой. Если не сложно (в пределах 2-х, 3-х кликов), можно ли меня "ткнуть носом" описание?
Re[16]: Взаимодействие с Базой Данных из C# по схеме MS
От: Cyberax Марс  
Дата: 28.11.08 19:31
Оценка:
Здравствуйте, IB, Вы писали:

C>>Это как раз не отчёты.

IB>Именно что отчеты, в чистом виде.
Нет. Тогда и вот такое можно считать отчётом:
public void print(Country contry)
{
   for(State st : country)
       System.out.println(st.getName());
}


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

IB>Не реализуется, потому что эти связи там лишние.
Реализуется. Смотрим на 1С.

C>>Угу, и получить помойку сервисов.

IB>Счегобыс?
Стогобыс. Очень много мелких сервисов получится.
Sapienti sat!
Re[17]: Взаимодействие с Базой Данных из C# по схеме MS
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.11.08 21:03
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Реализуется. Смотрим на 1С.


Смотрим на нормальные конфигурации и убеждаемся, что там в основном используют запросы либо вшитый в платформу функционал.
... << RSDN@Home 1.2.0 alpha 4 rev. 1115 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[17]: Взаимодействие с Базой Данных из C# по схеме MS
От: IB Австрия http://rsdn.ru
Дата: 29.11.08 11:21
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Нет. Тогда и вот такое можно считать отчётом:

А чем это не отчет?

C>Стогобыс. Очень много мелких сервисов получится.

Вот прям так, без вариантов?
Не получится.
... << RSDN@Home 1.2.0 alpha 4 rev. 1082>>
Мы уже победили, просто это еще не так заметно...
Re[15]: Взаимодействие с Базой Данных из C# по схеме MS
От: IB Австрия http://rsdn.ru
Дата: 29.11.08 11:21
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Поэтому, на практике при таком подходе получается, что тебе чаще всего просто не нужна способность реляционной модели натягивать иерархию с любой точки. Ты платишь за это избыточностью информации, примерно двукратной. Зато приобретаешь очень интересные полезные свойства. Например, у тебя элементарно все быстрее работает, за счет того, что join-ов стало меньше.

Ну, так это все относится именно к организации данных в хранилище, а не к тому, как я на это дело объекты натянул, чтобы отчеты построить и логику навернуть. Объекты опять-таки будут похожи на то, что у меня в хранилище лежит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1082>>
Мы уже победили, просто это еще не так заметно...
Re[16]: Взаимодействие с Базой Данных из C# по схеме MS
От: Gaperton http://gaperton.livejournal.com
Дата: 03.12.08 00:03
Оценка:
Здравствуйте, IB, Вы писали:

IB>Здравствуйте, Gaperton, Вы писали:


G>>Поэтому, на практике при таком подходе получается, что тебе чаще всего просто не нужна способность реляционной модели натягивать иерархию с любой точки. Ты платишь за это избыточностью информации, примерно двукратной. Зато приобретаешь очень интересные полезные свойства. Например, у тебя элементарно все быстрее работает, за счет того, что join-ов стало меньше.

IB>Ну, так это все относится именно к организации данных в хранилище, а не к тому, как я на это дело объекты натянул, чтобы отчеты построить и логику навернуть. Объекты опять-таки будут похожи на то, что у меня в хранилище лежит.

Это относится и к тому и к другому. Приведенная модель — это довольно сильное ограничение на объектную модель, и ее отображение в хранилище. Следуя этому ограничению, ты проектируешь систему сразу в терминах "документов", "справочников", и "регистров", избегая традиционной модели "сущность-связь". То есть, ты очень сильно себя ограничиваешь. Делается это заради получения некоторых полезных свойств.
Re[18]: Взаимодействие с Базой Данных из C# по схеме MS
От: Gaperton http://gaperton.livejournal.com
Дата: 03.12.08 00:27
Оценка: 22 (2)
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, Gaperton, Вы писали:


G>> Посмотри, как устроено 1С:Предприятие 8, модуль торговля+склад или как он там называется. Там вся база делается на трех классах объектов — справочник (статический объект), документ (соответствует действию, имеет время и может двигать "регистры"), "регистр" (похоже на OLAP-звезду, по нему можно строить отчеты и снимать с него в реальном времени, скажем, остатки).

A>Занятно. Спасибо, посмотрю.
A>...
A>Залез в Гугл -- инет забит рекламой. Если не сложно (в пределах 2-х, 3-х кликов), можно ли меня "ткнуть носом" описание?

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

Я тебя предупреждаю — это реально путь для мазохистов, если тебе не удастся найти толковой книги. Документация 1С тогда отдельно от их коробок не продавалась, и всегда была тошнотворным отстоем, вызывающим у программеров стойкий рвотный рефлекс.

Вообще, все очень просто. Система построена на нескольких простых принципах — рассказываю про 7.7.
1) Система состоит из объектов трех разных видов, которые представляют собой персистентные объекты. Справочники, Документы, и Регистры.
2) Справочники и Документы имеют визуальные формы, и могут редактироваться пользователем при их помощи.
3) Регистры являются почти классической OLAP-звездой, с тем исключением, что позволяют моментально брать остатки на текущий момент.
4) Справочник — это простая тупая таблица. Почти. Потому, что в ней может быть деревянная структура элементов. Можно задавать формы для просмотра всего справочника, и редактирования элементов. Поля элементов справочника могут ссылаться на объекты, которые лежат в других справочниках.
5) Система целиком берет на себя вопросы персистенса и data binding, и сама отслеживает вопросы редактирования полей объектов в формах, полагаясь на их типы. Например, при попытке редактирования поля типа справочник, она сама вывалит указанную форму списка для нужного "справочника".
6) Справочники моделируют статические объекты. А Документы — это объекты, которые моделируют действие. У документов обязательно есть дата и время. Документы могут быть "проведены", то есть изменять "регистры".
7) База данных 1С не только объектна, но и темпоральна. Время присутствует в ней в явном виде. Его можно двигать назад, и тогда все изменения в регистрах, сделанные документами за период отката, будут отменены. А можно — вперед, и тогда документы опять выполнят "проведение", возможно — с новым, исправленным алгоритмом. Это позволяет полностью менять всю аналитику на рабочей базе, выпоняя любые манипуляции с регистрами и учетными алгоритмами.
8) Регистры нужны для построения отчетов. Хорошая практика — если для отчета не хватает регистров, добавь новые, или расширь старые, воспользовавшись "темпоральностью", но не строй отчеты по "документам", как это принято в реляционных БД. Регистры избыточны, и всегда полностью восстанавливаются проведением документов. Польза в них, кроме производительности — они делают аналитику и учет полностью независимой от бизнес-процессов, этот механизм — своего рода слой абстракции.
9) Регистр содержит "измерения", которые могут быть любых типов, в том числе документ и справочник, и эти, как их "ресурсы", которые есть только числовые поля. В ацком языке запросов 1С, у которых есть параметр "период" (диапазон дат) на ресурсах регистра доступны магические темпоральные агрегатные функции, такие как "расход" и "приход". Пример регистра — "остатки товаров". Измерения: Товар, Склад. Ресурсы: КолВо, Стоимость. Документ при проведении делает в регистр запись вида "прибавить к ресурсам такие-то числа, при значениях измерений таких-то".
10) Отчет — это тупо визуальная форма, для ввода параметров отчета, печатная форма, напоминающая Excel, и программный код, который строит отчет. То есть — это не объект, а так.

Примерно все. Понятно, как работает?
Re[19]: Взаимодействие с Базой Данных из C# по схеме MS
От: Aikin Беларусь kavaleu.ru
Дата: 03.12.08 08:08
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Боюсь, что нет. Во-первых, я этим прекратил заниматься в 2000 году, еще на версии 7.7, и сейчас уже не в теме. Во-вторых, тогда вообще не было никаких учебников, приходилось учится это готовить самим. Сейчас, вероятно, должны уже появиться какие-то книги.

Вчера скачал пару книг. Но так до них и не добрался.

G>Я тебя предупреждаю — это реально путь для мазохистов, если тебе не удастся найти толковой книги. Документация 1С тогда отдельно от их коробок не продавалась, и всегда была тошнотворным отстоем, вызывающим у программеров стойкий рвотный рефлекс.

Мне не нужно "как это устроено в 1С" мне нужны принципы.

G>Примерно все. Понятно, как работает?

Издеваешься? Куча новых появилось

G>Вообще, все очень просто. Система построена на нескольких простых принципах — рассказываю про 7.7.

Из всего что ты написал меня интересовало:
1) Регистры (самая важная для меня часть системы) хранятся в виде OLAP-звезды // надо мне поближе с этим понятием познакомиться, полгода назад читанул пару статей, получил общие сведения и все. Нужно вернуться еще раз.
2) Не совсем понял что такое Документ // ...
3) Все изменения в документах сопровождаются добавлением регистров // тут отдельный вопрос: какая служебная информация хранится в регистре для идентефикации операции; как достигается атомарность операции, только транзакциями или есть еще какой механизм.
Re[20]: Взаимодействие с Базой Данных из C# по схеме MS
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.12.08 09:24
Оценка:
Здравствуйте, Aikin, Вы писали:

A>2) Не совсем понял что такое Документ // ...


Персистентная сущность с датой, номером, табличной частью и набором произвольных атрибутов. Кроме того, при изменении/добавлении/удалении есть автоматически вызываемые функции, которые могут выполнять запись в регистры. Откат производится автоматически.

A>3) Все изменения в документах сопровождаются добавлением регистров


Не обязательно, но как правило.

A> // тут отдельный вопрос: какая служебная информация хранится в регистре для идентефикации операции;


Что ты понимаешь под операцией?

A> как достигается атомарность операции, только транзакциями или есть еще какой механизм.


В 7.7 — тупые эксклюзивные блокировки таблиц целиком на основе блокировки файлов.
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[21]: Взаимодействие с Базой Данных из C# по схеме MS
От: Aikin Беларусь kavaleu.ru
Дата: 03.12.08 09:40
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Персистентная сущность с датой, номером, табличной частью и набором произвольных атрибутов. Кроме того, при изменении/добавлении/удалении есть автоматически вызываемые функции, которые могут выполнять запись в регистры. Откат производится автоматически.

А что такое "табличная часть"?

A>> // тут отдельный вопрос: какая служебная информация хранится в регистре для идентефикации операции;

AVK>Что ты понимаешь под операцией?
Любое действие над Документом в ходе которого создан регистр.

A>> как достигается атомарность операции, только транзакциями или есть еще какой механизм.

AVK>В 7.7 — тупые эксклюзивные блокировки таблиц целиком на основе блокировки файлов.
Ясно.
Re[22]: Взаимодействие с Базой Данных из C# по схеме MS
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.12.08 09:45
Оценка:
Здравствуйте, Aikin, Вы писали:

A>А что такое "табличная часть"?


Набор подчиненных персистентных объектов, представляющих строки документа.

AVK>>Что ты понимаешь под операцией?

A>Любое действие над Документом в ходе которого создан регистр.

Поскольку действие там ровно одно — проведение, то и идентификаторов никаких не надо.
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[23]: Взаимодействие с Базой Данных из C# по схеме MS
От: Aikin Беларусь kavaleu.ru
Дата: 03.12.08 10:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

A>>А что такое "табличная часть"?

AVK>Набор подчиненных персистентных объектов, представляющих строки документа.
А атрибуты чем от этого отличаются? По мне это тот же атрибут, только табличного типа.

AVK>>>Что ты понимаешь под операцией?

A>>Любое действие над Документом в ходе которого создан регистр.
AVK>Поскольку действие там ровно одно — проведение, то и идентификаторов никаких не надо.
Ну вот смотри. У нас есть Документ (в "ревизии" 0). Над ним произвели 5 действий (получился документ в "ревизии" 5). Эти 5 действий представлены 5-ю Регистрами. Как минимум у регистра есть Id документа и номер "ревизии" в которой Документ был изменен (он же задает последовательность применения Регистров к документу).


А правильно ли будет провести анлогию в VCS: Документ == файл под контролем, Регистр == набор изменений для конкретного файла?
Re[24]: Взаимодействие с Базой Данных из C# по схеме MS
От: Константин Б. Россия  
Дата: 03.12.08 11:04
Оценка: +1
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, AndrewVK, Вы писали:


A>>>А что такое "табличная часть"?

AVK>>Набор подчиненных персистентных объектов, представляющих строки документа.
A>А атрибуты чем от этого отличаются? По мне это тот же атрибут, только табличного типа.

AVK>>>>Что ты понимаешь под операцией?

A>>>Любое действие над Документом в ходе которого создан регистр.
AVK>>Поскольку действие там ровно одно — проведение, то и идентификаторов никаких не надо.
A>Ну вот смотри. У нас есть Документ (в "ревизии" 0). Над ним произвели 5 действий (получился документ в "ревизии" 5). Эти 5 действий представлены 5-ю Регистрами. Как минимум у регистра есть Id документа и номер "ревизии" в которой Документ был изменен (он же задает последовательность применения Регистров к документу).
A>А правильно ли будет провести анлогию в VCS: Документ == файл под контролем, Регистр == набор изменений для конкретного файла?

Я тоже не разбираюсь в 1С, но я это понял немного по другому. У нас есть Регистр(в "ревизии" 0). Над ним произвели 5 проводок (получился Регистр в "ревизии" 5). Эти 5 проводок представлены 5-ю Документами.
Re[25]: Взаимодействие с Базой Данных из C# по схеме MS
От: Aikin Беларусь kavaleu.ru
Дата: 03.12.08 11:21
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>Я тоже не разбираюсь в 1С, но я это понял немного по другому. У нас есть Регистр(в "ревизии" 0). Над ним произвели 5 проводок (получился Регистр в "ревизии" 5). Эти 5 проводок представлены 5-ю Документами.

А я понял в точности наоборот
Да и OLAP-звезды строятся именно по протянутым во времени сущностями, сохраняя каждую их версию.
Re[24]: Взаимодействие с Базой Данных из C# по схеме MS
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.12.08 11:34
Оценка:
Здравствуйте, Aikin, Вы писали:

A>А атрибуты чем от этого отличаются? По мне это тот же атрибут, только табличного типа.


Это по тебе. А по мнению авторов 1С — нет.

AVK>>Поскольку действие там ровно одно — проведение, то и идентификаторов никаких не надо.

A>Ну вот смотри. У нас есть Документ (в "ревизии" 0). Над ним произвели 5 действий (получился документ в "ревизии" 5). Эти 5 действий представлены 5-ю Регистрами.

Ничего не понял. Какие, нафик ревизии и какие 5 регистров? При каждом изменении документа все записи во всех регистрах, связанных с ним, удаляются. При повторном проведении — добавляются по новой. Никаких ревизий.

A> Как минимум у регистра есть Id документа


Есть

A> и номер "ревизии" в которой Документ был изменен


Нету. Есть только дата проведения.

A> (он же задает последовательность применения Регистров к документу).


Нет, не задает. Последовательность задает прикладной программист руками.

A>А правильно ли будет провести анлогию в VCS: Документ == файл под контролем, Регистр == набор изменений для конкретного файла?


Нет. Ты вообще, хотя бы примерно, представляешь себе, что такое OLAP/OLTP кубы?
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[26]: Взаимодействие с Базой Данных из C# по схеме MS
От: Константин Б. Россия  
Дата: 03.12.08 11:38
Оценка:
Здравствуйте, Aikin, Вы писали:

A>Здравствуйте, Константин Б., Вы писали:


КБ>>Я тоже не разбираюсь в 1С, но я это понял немного по другому. У нас есть Регистр(в "ревизии" 0). Над ним произвели 5 проводок (получился Регистр в "ревизии" 5). Эти 5 проводок представлены 5-ю Документами.

A>А я понял в точности наоборот
A>Да и OLAP-звезды строятся именно по протянутым во времени сущностями, сохраняя каждую их версию.

Ну.

3) Регистры являются почти классической OLAP-звездой, с тем исключением, что позволяют моментально брать остатки на текущий момент.

Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.