PDA

Просмотр полной версии : Концепция


Snaky
06.06.2006, 20:13
DOM = Data Objects Model
Создание ПО для быстрой разработки приложений баз данных
На это меня вдохновило 1С:Предприятие 8, поэтому освновную функциональность я брал оттуда.

DOM - это набор классов которые будут между данными и разработчиком, они будут представлять данные ввиду объектов.
Если говорить на языке 1С, то будут реализованы (пока) Справочники, Документы, Регистры сведений, Регистры накоплений (остатки).
Для тех кто не знает 1С и не только:
Справочники* - таблицы объектов (так и названы ObjectsTable) хранящие в себе объекты (DataObject). В справочниках уже встроенна иерархия, и владение (подчинение другому справочнику). Поля ID, Name, Parent и Owner сразу встроенны.

Документы - таблицы документов. Документы напоминают собой объекты, но они делают "движения" в регистры. Для документы необходмо указать регистры куда он делает движения. Пример документ"ПриемНаРаботу" делает движение в регистр сведений "РаботникиОрганизаций" - создает там запись о том что появился новый сотрудник и заводит данные о нем. Перед "проведением" документ проверяет не был ли этот сотрудник принят до этого. Документ "Увольнение" сами понимаете что делает со всеми соотвествующими проверками. Если сделать так тогда юзерам будет очень легко - они просто создают эти документы и проводят их а документы делают движения.

Регистры сведений - классификаторы. В них надо задать ключевые поля (обычно это объекты). Регистры хранят данные которые "лежат на пересечении нескольких объектов". Регистр бывают переодическими, т.е. автоматически добавляется еще одно ключевое поле "Период". Как правило, данные которые изменяются со временем хранят в регистрах. Например регистр сведений РаботникиОрганизаций - периодической и ключевые поля у него Организация и ФизЛицо. ФизЛицо - это справочник ФизическиеЛица (просто человек). Таким образом этот регистр хранит в себе данные о человеке в конкретной организации. Т.к. он периодической можно просмотреть то что было и то что есть сейчас. "Движения" это новые строки которые добавляются документом в регистр. Регистры бывают независимыми и подчиненными регистраторам. Если независимый, то строки можно заводить вручную а если подчиненные то данные могут вносить только документы и добавляется колонка Recorder (регистратор). Если регистр периодческий то у него есть методы ПолучитьПоследнее и ПолучитьПервое с указанием даты.

Регистры накоплений - частный случай региста сведений. Он всегда периодческий. Он в себе хранит специальные колонки "ресурсы" и специальную колонку ВидДвижения которая может принимать значений Расход или Приход (просто булево). У регистров накоплений есть метод Остаток, который складывает (или отнимает, в зависимости от вида движения) ресурсы и возвращает результат. Пример:
Есть регистр накоплений ТоварыНаСкладах (измерения Склад и Товар, ресурс Количество) хранящий в себе строки:


ВидДвижения
Период
Склад
Товар
Количество


+
02.03.2006
Склад1
Бутылка колы
5


-
03.03.2006
Склад1
Бутылка колы
3



в результате остаток по этим ключевым полям будет возвращать 2.

Во всех этих структурах данных колонки могут принимать значения разных типов в том числе типы объектов и документов.

Это было что-то вроде краткого курса в 1С:Предприятие 8. Такая структура очень ускоряет разработку. Уж поверьте.
Вообще в 1С сделано гораздо больше но сделав хотя бы эти 4 пункта будет уже большим и полезным делом.

То что я тут написал - какой-то очень поверхностный овервью 1С, а не проекта. Это я понимаю. Но не все работали с 1С и должны понимать структуры которые там являются стандартными.

To be continued.

Snaky
07.06.2006, 17:27
Забыл сказать
еще у документов и справочников есть подтаблицы. Они называются Табличные Части. В DOM они названы Details. Это чистые данные. К ним нельзя обратится как к объектам.

Snaky
08.06.2006, 13:25
и так продолждение.
Теперь, КАК ЭТО РЕАЛИЗОВАНО/планируется реализовать
Базируется на .NET Framework 2.0 и разрабатывается на C# 2.0

надо сразу заметить что многое уже сделано но с кучей ошибок, потому что не тестировалось
Есть три основных базовых класса Table, Row и Column. Причем Table<T> where T:Row.
Table хранит в себе колонки и строки.
Каждая строка знает о таблице, которой она принадлежит. Т.к. нельзя для ряда определить сразу готовый тип таблицы (потому что он generic) то, на каждый класс таблицы создается интерфейс, где описываются спецефические этому классу методы и свойства. Таким образом ряд знает о своей таблице как об интерфейсе: Row.Table: ITable.
У Column определен тип (причем допускается несколько значений, в том числе объектные) и установке значения проверяется тип. Происходит это в виртуальных методах GetValue(Row) и SetValue(Row, Object), таким образом их можно переопределять в дочерних классах и обрабатывать по своему.

Дальше на каждый тип таблицы (Справочники, Документы, Табличные Части, Регистры Сведений, Регистры накоплений) создаются свои классы таблиц и рядов и один интерфейс на таблицу. Лучше всего эта иерархия показана на диаграмме классов. Скоро принесу.

В конечном итоге это будут сложные классы таблиц, от которых разработчики будут наследовать свои таблицы. В классах они будут предопределять виртуальные методы такие как InitColumns(для настройки встроенных полей (имя, тип, длина) и добавления своих) и InitCommands (при необходимости). Напрмер справочников в такую "настройку" также входят виртуальные свойства:
NameSupport: bool // есть ли колонка Наименование
Hierarchical: bool // если таблица поддерживает иерархию
если в конструкторе указать таблицу - владельца, то в таблице автоматически создается колонка OwnerColumn и т.д.
У рядов будут создаваться свойства значений колонок, например:
public DateTime CreationDate
{get{return (DateTime)this[Table.CreationDateColumn];}
set{this[Table.CreationDate]=value;}}

Вы наверно догадываетесь, что в таком случае разработчикам придется не мало попотеть над этим самым кодом, поэтому чтобы увеличить скорость разработки будет создан Dom.Builder (уже создается). Это либо отдельное приложение либо Add-in в Visual Studio 2005, в котором можно будет создавать таблицы, указывать им колонки, тонко настраивать и т.д. Причем будет возможность создавать новые таблице сразу на сервере с соответсвующей структурой посредством команд Create Table, Alter Table...

Скоро принесу диаграмму иерархии почти всех классов и пример для Northwind.

AAlexander
27.06.2006, 15:38
Скоро принесу диаграмму иерархии почти всех классов и пример для Northwind.


И?

Atham Mirazizov
30.11.2006, 17:38
Снаки,
тема затронутая тобой очень обширна и актуальна. Самое сложное в привлечении программистов к реальному использованию подобных вещей. Пока не будет 6-8 человек,разработавших удачные проекты с использованием этой техники и показавших другим проект ДОМ будет невостребован. Далее нужен хороший Пиар .... мдааа я перехожу в оффтоп. В общем случае всё это прелюбопытнейшая вешь, но пока она не будет приносить людям её использующим материальное и моральное удовлетворение никто не поддержит такие начинания. Проходил через это.