Бизнес-объект

Материал из GedeminWiki
Перейти к: навигация, поиск

Если попытаться выразить сущность платформы Гедымин в одном словосочетании, то этим словосочетанием будет бизнес-объект. Именно бизнес-объекты отвечают за слово "быстрый" в слогане "средство быстрой разработки экономического программного обеспечения".

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

Classes.gdcBase1.png

Использование набора данных (TDataSet), как одного из прародителей бизнес-классов позволяет стандартным образом, посредством компонента TDataSource подключаться к визуальным компонентам для отображения и редактирования данных.

Уникальным и незаменимым бизнес-объект делают следующие функции:

  • Представление реляционных данных в объектном виде (OMR — Object Relational Mapping)
  • Контроль за разграничением прав доступа
  • Сериализация данных
  • Организация пользовательского интерфейса
  • Реализация логики бухгалтерского и складского движения

Object Relational Mapping

В базе данных Гедымина информация о компании (юридическом лице) хранится в виде связанных 1-к-1 записей минимум в двух таблицах: GD_CONTACT и GD_COMPANY. Третья таблица — GD_COMPANYCODE — опциональная.

Database.Ref.gd_company.png

Таким образом, операция добавления новой компании в базу данных потребует выполнения последовательности следующих действий:

  1. Старт транзакции
  2. Добавление записи в GD_CONTACT
  3. Добавление записи в GD_COMPANY
  4. Добавление записи в GD_COMPANYCODE
  5. Комит транзакции
Option Explicit
Function AddCompany(CompanyName, TaxID)
 
  Dim q, Tr, Creator
  Set Creator = New TCreator
  Set q = Creator.GetObject(Application, "TIBSQL", "")
  Set Tr = Creator.GetObject(Application, _
    "TIBTransaction", "")
  AddCompany = gdcBaseManager.GetNextID
 
  Tr.DefaultDatabase = gdcBaseManager.Database
  Tr.StartTransaction
 
  q.Transaction = Tr
  q.SQL.Text = "INSERT INTO gd_contact " &_
    "(id, parent, contacttype, name) " &_
    "VALUES (:id, :parent, :contacttype, :name) "
  q.ParamByName("id").AsInteger = AddCompany
  q.ParamByName("parent").AsInteger = _
    gdcBaseManager.GetIDByRUIDString("147002208_31587988")
  q.ParamByName("contacttype").AsInteger = 3
  q.ParamByName("name").AsString = CompanyName
  q.ExecQuery
 
  q.SQL.Text = "INSERT INTO gd_company " &_
    "(contactkey, fullname) VALUES (:contactkey, :fullname)"
  q.ParamByName("contactkey").AsInteger = AddCompany
  q.ParamByName("fullname").AsString = CompanyName
  q.ExecQuery
 
  q.SQL.Text = "INSERT INTO gd_companycode " &_
    "(companykey, taxid) VALUES (:companykey, :taxid) "
  q.ParamByName("companykey").AsInteger = AddCompany
  q.ParamByName("taxid").AsString = TaxID
  q.ExecQuery
 
  Tr.Commit
 
End Function
Option Explicit
Function AddCompany2(CompanyName, TaxID)
 
  Dim Creator, Obj
  Set Creator = New TCreator
  Set Obj = Creator.GetObject(Application, "TgdcCompany",_ 
    "")
 
  Obj.Open
  Obj.Insert
  Obj.FieldByName("parent").AsInteger = _
    gdcBaseManager.GetIDByRUIDString("147002208_31587988")
  Obj.FieldByName("name").AsString = CompanyName
  Obj.FieldByName("taxid").AsString = "123456789"
  Obj.Post
 
  AddCompany2 = Obj.ID
 
End Function
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты