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

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Object Relational Mapping)
 
(не показаны 22 промежуточные версии 2 участников)
Строка 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: Строка 11:
 
Уникальным и незаменимым бизнес-объект делают следующие функции:
 
Уникальным и незаменимым бизнес-объект делают следующие функции:
  
* Представление реляционных данных в объектном виде (OMR — Object Relational Mapping)
 
* Контроль за разграничением прав доступа
 
* Сериализация данных
 
* Организация пользовательского интерфейса
 
* Реализация логики бухгалтерского и складского движения
 
  
== Object Relational Mapping ==
+
http://gsbelarus.com/gs/images/gs/2005/gedemin/bcstruct.png
 +
 
 +
 
 +
* [[Бизнес-объект. Object Relational Mapping|Представление реляционных данных в объектном виде (ORM— Object Relational Mapping)]]
 +
* [[Бизнес-объект. Разграничение прав доступа|Разграничение прав доступа]]
 +
* [[Бизнес-объект. Сериализация данных|Сериализация данных]]
 +
* [[Бизнес-объект. Организация пользовательского интерфейса|Организация пользовательского интерфейса]]
 +
* Реализация логики бухгалтерского и складского движения
  
В базе данных Гедымина информация о компании (юридическом лице) хранится в виде связанных 1-к-1 записей минимум в двух таблицах: [[GD_CONTACT]] и [[GD_COMPANY]]. Третья таблица — [[GD_COMPANYCODE]] — опциональная.
+
===Виды бизнес-классов===
  
http://gsbelarus.com/gs/images/gs/2009/book/Database.Ref.gd_company.png
+
В иерархии бизнес-классов платформы Гедымин встречаются классы следующих видов:
  
Таким образом, операция добавления новой компании в базу данных потребует выполнения последовательности следующих действий:
+
# Абстрактный базовый класс (Abstract Base Class -- ABC)
 +
# Базовый класс
 +
# Производный класс или просто класс
  
# Старт транзакции
+
Примеры абстрактных базовых классов, это: TgdcBase, TgdcTree, TgdcLBRBTree и др. Абстрактный базовый класс не имеет главной таблицы (ListTable) и, соответственно, создать экземпляр такого класса нельзя. Основное предназначение абстрактного базового класса — это определение интерфейса для всех потомков.
# Добавление записи в GD_CONTACT
+
# Добавление записи в GD_COMPANY
+
# Добавление записи в GD_COMPANYCODE
+
# Комит транзакции
+
  
<source lang="vbnet">
+
Базовый класс предназначен для работы со списком объектов, имеющих общего родителя. Например, такие объекты как: Компания (TgdcCompany), Физическое лицо (TgdcContact), Банк (TgdcBank) и т.д. имеют общего родителя -- базовый класс TgdcBaseContact. Мы можем создать экземпляр базового класса и использовать его для отображения списка контактов. При вызове метода EditDialog, код базового класса определит тип текущей записи (GetCurrRecordClass), создаст экземпляр соответствующего класса и вызовет его метод EditDialog. Принято включать в наименование базового класса слово Base (пример: TgdcBaseContact).
Option Explicit
+
Function AddCompany(CompanyName, TaxID)
+
  
  Dim q, Tr, Creator
+
Наконец, просто класс наследуется от базового класса или абстрактного базового класса и служит для представления конкретной сущности в базе данных. Если от простого класса наследуются другие классы, то он совмещает в себе черты поведения как базового класса, так и производного класса. Для того, чтобы внести ясность, рассмотрим класс Компания (TgdcCompany). От этого класса наследован класс Банк (TgdcBank). Если мы создадим экземпляр TgdcCompany, откроем список компаний, а затем попытаемся открыть одну из них на редактирование (метод EditDialog), то, если тип текущей записи равен типу Компания, то для редактирования будет использоваться текущий объект. Если тип текущей записи -- Банк, то для редактирования будет создан экземпляр класса TgdcBank у которого будет вызван метод EditDialog.
  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
+
* [[Список бизнес-классов]]
</source>
+
* [http://gsbelarus.com/gs/modules.php?name=Downloads&d_op=getit&lid=48 Иерархия бизнес-классов ядра платформы]
  
 
[[Category:Учебный курс]]
 
[[Category:Учебный курс]]
 +
[[Category:Бизнес-объект]]

Текущая версия на 19:08, 10 января 2015

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

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


Classes.gdcBase2.png


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

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


bcstruct.png


[править] Виды бизнес-классов

В иерархии бизнес-классов платформы Гедымин встречаются классы следующих видов:

  1. Абстрактный базовый класс (Abstract Base Class -- ABC)
  2. Базовый класс
  3. Производный класс или просто класс

Примеры абстрактных базовых классов, это: TgdcBase, TgdcTree, TgdcLBRBTree и др. Абстрактный базовый класс не имеет главной таблицы (ListTable) и, соответственно, создать экземпляр такого класса нельзя. Основное предназначение абстрактного базового класса — это определение интерфейса для всех потомков.

Базовый класс предназначен для работы со списком объектов, имеющих общего родителя. Например, такие объекты как: Компания (TgdcCompany), Физическое лицо (TgdcContact), Банк (TgdcBank) и т.д. имеют общего родителя -- базовый класс TgdcBaseContact. Мы можем создать экземпляр базового класса и использовать его для отображения списка контактов. При вызове метода EditDialog, код базового класса определит тип текущей записи (GetCurrRecordClass), создаст экземпляр соответствующего класса и вызовет его метод EditDialog. Принято включать в наименование базового класса слово Base (пример: TgdcBaseContact).

Наконец, просто класс наследуется от базового класса или абстрактного базового класса и служит для представления конкретной сущности в базе данных. Если от простого класса наследуются другие классы, то он совмещает в себе черты поведения как базового класса, так и производного класса. Для того, чтобы внести ясность, рассмотрим класс Компания (TgdcCompany). От этого класса наследован класс Банк (TgdcBank). Если мы создадим экземпляр TgdcCompany, откроем список компаний, а затем попытаемся открыть одну из них на редактирование (метод EditDialog), то, если тип текущей записи равен типу Компания, то для редактирования будет использоваться текущий объект. Если тип текущей записи -- Банк, то для редактирования будет создан экземпляр класса TgdcBank у которого будет вызван метод EditDialog.

Полный тип бизнес-объекта состоит из его типа (бизнес-класса) и подтипа.

[править] См. также

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

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