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

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Object Relational Mapping)
Строка 3: Строка 3:
 
Бизнес-объектом мы называем экземпляр одного из наследников абстрактного базового класса [[TgdcBase]]. В свою очередь TgdcBase, как это следует из представленной диаграммы, является наследником класса [[TIBCustomDataSet]].  
 
Бизнес-объектом мы называем экземпляр одного из наследников абстрактного базового класса [[TgdcBase]]. В свою очередь TgdcBase, как это следует из представленной диаграммы, является наследником класса [[TIBCustomDataSet]].  
  
http://gsbelarus.com/gs/images/gs/2009/book/Classes.gdcBase1.png
+
http://gsbelarus.com/gs/images/gs/2009/book/Classes.gdcBase2.png
  
 
Использование набора данных ([[TDataSet]]), как одного из прародителей бизнес-классов позволяет стандартным образом, посредством компонента [[TDataSource]] подключаться к визуальным компонентам для отображения и редактирования данных.
 
Использование набора данных ([[TDataSet]]), как одного из прародителей бизнес-классов позволяет стандартным образом, посредством компонента [[TDataSource]] подключаться к визуальным компонентам для отображения и редактирования данных.
Строка 9: Строка 9:
 
Уникальным и незаменимым бизнес-объект делают следующие функции:
 
Уникальным и незаменимым бизнес-объект делают следующие функции:
  
* Представление реляционных данных в объектном виде (OMR — Object Relational Mapping)
+
* [[Бизнес-объект. Object Relational Mapping|Представление реляционных данных в объектном виде (OMR — Object Relational Mapping)]]
 
* Контроль за разграничением прав доступа
 
* Контроль за разграничением прав доступа
 
* Сериализация данных
 
* Сериализация данных
 
* Организация пользовательского интерфейса
 
* Организация пользовательского интерфейса
 
* Реализация логики бухгалтерского и складского движения
 
* Реализация логики бухгалтерского и складского движения
 
== Object Relational Mapping ==
 
 
Рассмотрим такой пример. В базе данных Гедымина информация о компании (юридическом лице) хранится в виде связанных 1-к-1 записей минимум в двух таблицах: [[GD_CONTACT]] и [[GD_COMPANY]]. Третья таблица — [[GD_COMPANYCODE]] — опциональная.
 
 
http://gsbelarus.com/gs/images/gs/2009/book/Database.Ref.gd_company.png
 
 
Таким образом, операция добавления новой компании с заданным именем и УНП (TaxID) потребует выполнения последовательности следующих действий:
 
 
# Старт транзакции
 
# Добавление записи в GD_CONTACT
 
# Добавление записи в GD_COMPANY
 
# Добавление записи в GD_COMPANYCODE
 
# Комит транзакции
 
 
Ниже представлены две функции. Первая — '''AddCompany''' — добавляет компанию "реляционным" способом, выполняя последовательно три операции INSERT в разные таблицы. Функция '''AddCompany2''' использует бизнес-объект типа [[TgdcCompany]] для достижения такого же результата.
 
 
==== Функция AddCompany ====
 
 
<source lang="vbnet">
 
Function AddCompany(CompanyName, TaxID)
 
 
  Dim q, Tr, Creator, ID
 
  Set Creator = New TCreator
 
  Set q = Creator.GetObject(Application, "TIBSQL", "")
 
  Set Tr = Creator.GetObject(Application, "TIBTransaction", "")
 
  ID = 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 = ID
 
  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 = ID
 
  q.ParamByName("fullname").AsString = CompanyName
 
  q.ExecQuery
 
 
  q.SQL.Text = "INSERT INTO gd_companycode (companykey, taxid) VALUES (:companykey, :taxid) "
 
  q.ParamByName("companykey").AsInteger = ID
 
  q.ParamByName("taxid").AsString = TaxID
 
  q.ExecQuery
 
 
  Tr.Commit
 
  AddCompany = ID
 
 
End Function
 
</source>
 
 
==== Функция AddCompany2 ====
 
 
<source lang="vbnet">
 
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 = TaxID
 
  Obj.Post
 
 
 
  AddCompany2 = Obj.ID
 
 
End Function
 
</source>
 
 
Очевидно, что второй вариант требует меньших усилий со стороны программиста. Код получается короче и легче в понимании.
 
 
===== Важное замечание! =====
 
 
Если вы захотите поэксперементировать с этими функциями на своей базе данных, то в вызове:
 
<source lang="vbnet">
 
  gdcBaseManager.GetIDByRUIDString("147002208_31587988")
 
</source>
 
следует прописать RUID некоторой папки из вашего справочника клиентов. Создаваемые функциями компании будут размещены в этой папке.
 
  
 
[[Category:Учебный курс]]
 
[[Category:Учебный курс]]

Версия 19:56, 10 января 2010

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

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

Classes.gdcBase2.png

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

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

Персональные инструменты
Пространства имён

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