Роль программирования в смеле
пример реализации актер/узор роль полужирным шрифтом.
р><р класса="step_content "><р выровнять="центр"><Стронг><у>ролевое программирование жирным шрифтому>сильные>р><р класса="step_content "><р выровнять="левой">полужирный позволяет разработчикам для разработки ООП приложений, которые сохраняются в базе данных. Это дает нам возможность добавлять наследство для наших приложений, но эта способность может быть использована.р><р класса="step_content "><р выровнять="левой">в качестве примера в приложение я разработал в смелый раз у меня была такая модель.
<р выровнять="центр">
р><р класса="step_content "><р выровнять="левой">эта структура позволяет приложение для записи заказов от клиентов, работа администратор может быть назначен на AdminEmployee, и полетной информации могут быть записаны на пилота.р><р класса="step_content "><р выровнять="центр"><Стронг><у>рольу>сильные>р><р класса="step_content "><р выровнять="левой">проблема с выше сценарий, когда роли начинают смешиваться. Например, сотрудник может стать клиентом, или Пилот может выполнять некоторые работы администрации.р><р класса="step_content "><р выровнять="левой">решение этой проблемы заключается в использовании актер/рисунок роли. Каждый актер (абстрактный класс) может получить несколько ролей (также абстрактный класс). Это такие роли, которые имеют бизнес, связанный сведения, связанные с ними. Например, PilotRole бы иметь информацию о рейсах связанные с ним, и CustomerRole бы заказы, связанные с ним.р><р класса="step_content "><р выровнять="левой">новая модель будет выглядеть так.р><р класса="step_content "><р выровнять="центр">
р><р класса="step_content ">
- актер может не иметь никакой роли или нескольких ролей.
- конкретного экземпляра актер может запретить снятие с роли.
- роль может отказать в применении к конкретному актеру.
- роль может указать, что оно является обязательным и не может быть удален (т. е. LoginRoleсильная> не может быть удален, потому что пользователь также имеет SystemAdministratorRoleв)
- конкретного экземпляра актер может отказаться от роли.
р><р класса="step_content "><ем>листинг 1: актерем>р><р класса="step_content "><Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00">//принять или отвергнуть роль
и функция TActor.CanAcceptRole(ARoleClass: TRoleClass): boolean значение
и начинается
если не ARoleClass.AllowDuplicates и HasRole(ARoleClass, шь), то есть
результат := ложь
и еще
если не ARoleClass.AllowActiveDuplicates и
HasActiveRole(ARoleClass, шь), то есть
результат := ложь
и еще
В результате := ARoleClass.CanApplyTo(Самовыдвижение)
В конце р><р класса="step_content ">
//разрешить или запретить удаление роли
и функция TActor.CanRemoveRole(ARole: TRole): boolean значение
и начинается
результат := не ARole.Требуется
В конце
//возвращает роль, но только если он активен<функция бр />TActor.FindActiveRole(в aclass: TClass ExcludeInstance: TRole): TRole
вар
я: число
и начинается
результат := мь
для меня := 0 ролям.Счет - 1 делать
если роли[я].Активный и (ролей[я].Типа класса = класс) и
(функций[я] <> ExcludeInstance) тогда
и начинается
результат := роли[я] и
перерыв
В итоге
В конце
//возвращает роль, будь то активный или нет
и функция TActor.FindRole(в aclass: TClass ExcludeInstance: TRole): TRole
вар
я: число
и начинается
результат := мь
для меня := 0 ролям.Счет - 1 делать
если (роли[я].Типа класса = класс) и
(функций[я] <> ExcludeInstance) тогда
и начинается
результат := роли[я]
перерыв
В итоге
В конце
//возвращает True, если актер владеет определенной роли, и он активен и
функция TActor.HasActiveRole(в aclass: TClass ExcludeInstance: TRole): boolean значение
и начинается
результат := назначенных(FindActiveRole(класс, ExcludeInstance))
В конце
//возвращает True, если Актеры владеет определенной роли (активные или неактивные);
и функция TActor.HasRole(в aclass: TClass ExcludeInstance: TRole): boolean значение
и начинается
результат := назначенных(FindRole(класс, ExcludeInstance))
В конце
функции TActor.ReceiveQueryFromOwned(Отправитель: TObject OriginalEvent: TBoldEvent
и константные Аргументы: массив константный абонента: TBoldSubscriber): Булевы функции
вар
В ObjectLocator: TBoldObjectLocator
в роли: TRole
и начинается
результат := наследству ReceiveQueryFromOwned(Составитель, OriginalEvent, Аргументы, Абонент)
если нет результата или BoldObjectIsDeleted после выхода //проверка на ввод ролей
если (Отправитель = M_Roles) затем
и начинается
если OriginalEvent = bqMayInsert тогда
и начинается
//получить роль, которую вставляться
утверждать(параметр args[1].Премиумной техники = vtObject)
В ObjectLocator := (параметр args[1].VObject как TBoldObjectLocator)
на роль := (ObjectLocator.BoldObject как TRole) //проверка на дублирование функций которой не допускается
если (не последнюю роль.AllowDuplicates) и
(HasRole(роль.Типа класса, шь)) тогда
и начинается
результат := ложь
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('эта роль может быть применен только один раз', я)
В )
В конце еще и
//проверка на дублирование активных ролей, которые не допускаются
если (не последнюю роль.AllowActiveDuplicates) и
(HasActiveRole(роль.Типа класса, шь)) затем
с начала<див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ">див> <див класс="блок-внутренний"> <див класс="содержание"> див> <див класс="блок-дна">див> див> див> див><див класс='embed_block_1'><див>див>див>
результат := ложь
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('не может претендовать на эту роль, потому что'
и там уже активную роль такого', я)
В )
В конце еще
В результате := CanAcceptRole(TRoleClass(роль.Типа класса)) р><р класса="step_content "> если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('роли не могут быть применены к данному объекту', я)
В )
В конце еще //bqMayInsert
В //проверки для удаления ролей
если OriginalEvent = bqMayRemove затем
и начинается
//получить роль объекта удаляется
как утверждают(параметр args[0].Премиумной техники = число)
в роли := роли[параметр args[0].VInteger]
В результате := (не роль.Активный) или (не роль.Требуется)
если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('роль не может быть удалена,'
'это необходимо еще активное роль самих себе)
В )
В итоге //bqMayRemove
В конце
В конце р><р класса="step_content ">тд>тр>элемента tbody>Таблица>р><р класса="step_content "><ем>в листинге 2: Роль на сайтер><р класса="step_content "><Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00">//разрешить или запретить применение к конкретному актер
в классе функция TRole.CanApplyTo(AObject: TActor): boolean значение
и начинается
результат := ложь
В конце
//виртуальный метод, чтобы переопределить в потомках, которые описывает роль
в классе функция TRole.GetRoleName: строки
и начинается
результат := "
В конце
//необязательный, задает ли активные дубли разрешены или нет
в классе функция TRole.AllowActiveDuplicates: логическое
и начинается
результат := ложь
В конце
//необязательный, указывает, если дубликатов не допускается или нет (активные или неактивные);
в классе функция TRole.AllowDuplicates: логическое
и начинается
результат := ложь
В конце
//возвращает True, если любая роль, от этого зависит роль, которую должны представить в
функция TRole.Требуется: логическое и
вар
я: число
и начинается
если актер <> нулю, то
и начинается
результат := истина
для меня := 0 для актера.Роли.Счет - 1 делать
если актера.Роли[я] <> самостоятельно, то
если актера.Роли[Я].RequiresRole(самовыдвижение) тогда
на выходе
В конце
как результат := ложь
В конце
//Переопределить это, чтобы указать, если другой роли зависит от того,
функция TRole.RequiresRole(ARole: TRole): boolean значение
и начинается
результат := ложь
В конце
//заполняет производными имя роли атрибута из класса метод
в процедуре TRole._RoleName_DeriveAndSubscribe(DerivedObject: TObject абонента: TBoldSubscriber)
и начинается
унаследовала
В M_RoleName.AsString := GetRoleName
В конце
//предотвращает удаление необходимый роль
и функция TRole.MayDelete: логическое
и начинается
результат := не требуется
В конце
функции TRole.ReceiveQueryFromOwned(Отправитель: TObject OriginalEvent: TBoldEvent
и константные Аргументы: массив константный абонента: TBoldSubscriber): boolean значение
и начинается
результат := наследству ReceiveQueryFromOwned(Составитель,
В OriginalEvent, Аргументы, Абонент)
если не результат тогда выход
если (Отправитель = M_Active) тогда //Активный атрибут
и начинается
если OriginalEvent = bqMayModify затем
и начинается
если актер = шь то, что
результат := истина
и еще
если, то
и начинается
//запрет отключения если еще одна роль требует
при //этом роль активных
В результате := не требуется
если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('не могу Выключить эту роль,'
и другие роли, требующие это, я)
В )
В конце еще
и начинается
//запрет повторной активации, если еще активную роль существует
С //и дубликаты не разрешены
В результате := AllowActiveDuplicates или (не актер.HasActiveRole(Самовыдвижение.Типа класса, самостоятельно))
если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('не удается активировать эту роль'
'потому что есть уже похожие активную роль, проблемы)
В )
В конце
В итоге //bqMayModify
В итоге //Активный attributeend
В конце тд>тр>элемента tbody>Таблица>р><р класса="step_content "><Стронг>
сильные>р><р класса="step_content "><р выровнять="левой">код до сих пор все было абстрактно. Все, что осталось спуститься какие-то конкретные классы от актера и роль.р><р класса="step_content "><р выровнять="левой"><Стронг><ем>
их>р><р класса="step_content "><р выровнять="центр"><размер шрифта="3"><у><Стронг><ем>заключениеих>у>шрифт>р><р класса="step_content "><р выровнять="левой"><размер шрифта="3">вместо того, что работник класс или класс клиентов, мы можем теперь легко назначают EmployeeRole или CustomerRole для любого типа лица объекта (который актер). шрифт>р><р класса="step_content "><р выровнять="левой"><размер шрифта="3">кроме того, мы можем смешивать роли, Пилот может выполнять администрация, и все может быть клиент (человек, Отдел, компания или даже Страна).шрифт>р><р класса="step_content "><р выровнять="левой"><размер шрифта="3">я надеюсь, что эта статья была информативной.шрифт>р><дел стиль= \ ясно:оба поплавка:нет'>дел><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная див>
Роль программирования в смеле
Роль программирования в смеле : Несколько тысяч советов, которые сделают вашу жизнь проще.
пример реализации актер/узор роль полужирным шрифтом.
р><р класса="step_content "><р выровнять="центр"><Стронг><у>ролевое программирование жирным шрифтому>сильные>р><р класса="step_content "><р выровнять="левой">полужирный позволяет разработчикам для разработки ООП приложений, которые сохраняются в базе данных. Это дает нам возможность добавлять наследство для наших приложений, но эта способность может быть использована.р><р класса="step_content "><р выровнять="левой">в качестве примера в приложение я разработал в смелый раз у меня была такая модель.
<р выровнять="центр">
р><р класса="step_content "><р выровнять="левой">эта структура позволяет приложение для записи заказов от клиентов, работа администратор может быть назначен на AdminEmployee, и полетной информации могут быть записаны на пилота.р><р класса="step_content "><р выровнять="центр"><Стронг><у>рольу>сильные>р><р класса="step_content "><р выровнять="левой">проблема с выше сценарий, когда роли начинают смешиваться. Например, сотрудник может стать клиентом, или Пилот может выполнять некоторые работы администрации.р><р класса="step_content "><р выровнять="левой">решение этой проблемы заключается в использовании актер/рисунок роли. Каждый актер (абстрактный класс) может получить несколько ролей (также абстрактный класс). Это такие роли, которые имеют бизнес, связанный сведения, связанные с ними. Например, PilotRole бы иметь информацию о рейсах связанные с ним, и CustomerRole бы заказы, связанные с ним.р><р класса="step_content "><р выровнять="левой">новая модель будет выглядеть так.р><р класса="step_content "><р выровнять="центр">
р><р класса="step_content ">
- актер может не иметь никакой роли или нескольких ролей.
- конкретного экземпляра актер может запретить снятие с роли.
- роль может отказать в применении к конкретному актеру.
- роль может указать, что оно является обязательным и не может быть удален (т. е. LoginRoleсильная> не может быть удален, потому что пользователь также имеет SystemAdministratorRoleв)
- конкретного экземпляра актер может отказаться от роли.
р><р класса="step_content "><ем>листинг 1: актерем>р><р класса="step_content "><Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00">//принять или отвергнуть роль
и функция TActor.CanAcceptRole(ARoleClass: TRoleClass): boolean значение
и начинается
если не ARoleClass.AllowDuplicates и HasRole(ARoleClass, шь), то есть
результат := ложь
и еще
если не ARoleClass.AllowActiveDuplicates и
HasActiveRole(ARoleClass, шь), то есть
результат := ложь
и еще
В результате := ARoleClass.CanApplyTo(Самовыдвижение)
В конце р><р класса="step_content ">
//разрешить или запретить удаление роли
и функция TActor.CanRemoveRole(ARole: TRole): boolean значение
и начинается
результат := не ARole.Требуется
В конце
//возвращает роль, но только если он активен<функция бр />TActor.FindActiveRole(в aclass: TClass ExcludeInstance: TRole): TRole
вар
я: число
и начинается
результат := мь
для меня := 0 ролям.Счет - 1 делать
если роли[я].Активный и (ролей[я].Типа класса = класс) и
(функций[я] <> ExcludeInstance) тогда
и начинается
результат := роли[я] и
перерыв
В итоге
В конце
//возвращает роль, будь то активный или нет
и функция TActor.FindRole(в aclass: TClass ExcludeInstance: TRole): TRole
вар
я: число
и начинается
результат := мь
для меня := 0 ролям.Счет - 1 делать
если (роли[я].Типа класса = класс) и
(функций[я] <> ExcludeInstance) тогда
и начинается
результат := роли[я]
перерыв
В итоге
В конце
//возвращает True, если актер владеет определенной роли, и он активен и
функция TActor.HasActiveRole(в aclass: TClass ExcludeInstance: TRole): boolean значение
и начинается
результат := назначенных(FindActiveRole(класс, ExcludeInstance))
В конце
//возвращает True, если Актеры владеет определенной роли (активные или неактивные);
и функция TActor.HasRole(в aclass: TClass ExcludeInstance: TRole): boolean значение
и начинается
результат := назначенных(FindRole(класс, ExcludeInstance))
В конце
функции TActor.ReceiveQueryFromOwned(Отправитель: TObject OriginalEvent: TBoldEvent
и константные Аргументы: массив константный абонента: TBoldSubscriber): Булевы функции
вар
В ObjectLocator: TBoldObjectLocator
в роли: TRole
и начинается
результат := наследству ReceiveQueryFromOwned(Составитель, OriginalEvent, Аргументы, Абонент)
если нет результата или BoldObjectIsDeleted после выхода //проверка на ввод ролей
если (Отправитель = M_Roles) затем
и начинается
если OriginalEvent = bqMayInsert тогда
и начинается
//получить роль, которую вставляться
утверждать(параметр args[1].Премиумной техники = vtObject)
В ObjectLocator := (параметр args[1].VObject как TBoldObjectLocator)
на роль := (ObjectLocator.BoldObject как TRole) //проверка на дублирование функций которой не допускается
если (не последнюю роль.AllowDuplicates) и
(HasRole(роль.Типа класса, шь)) тогда
и начинается
результат := ложь
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('эта роль может быть применен только один раз', я)
В )
В конце еще и
//проверка на дублирование активных ролей, которые не допускаются
если (не последнюю роль.AllowActiveDuplicates) и
(HasActiveRole(роль.Типа класса, шь)) затем
с начала<див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ">див> <див класс="блок-внутренний"> <див класс="содержание"> див> <див класс="блок-дна">див> див> див> див><див класс='embed_block_1'><див>див>див>
результат := ложь
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('не может претендовать на эту роль, потому что'
и там уже активную роль такого', я)
В )
В конце еще
В результате := CanAcceptRole(TRoleClass(роль.Типа класса)) р><р класса="step_content "> если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('роли не могут быть применены к данному объекту', я)
В )
В конце еще //bqMayInsert
В //проверки для удаления ролей
если OriginalEvent = bqMayRemove затем
и начинается
//получить роль объекта удаляется
как утверждают(параметр args[0].Премиумной техники = число)
в роли := роли[параметр args[0].VInteger]
В результате := (не роль.Активный) или (не роль.Требуется)
если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('роль не может быть удалена,'
'это необходимо еще активное роль самих себе)
В )
В итоге //bqMayRemove
В конце
В конце р><р класса="step_content ">тд>тр>элемента tbody>Таблица>р><р класса="step_content "><ем>в листинге 2: Роль на сайтер><р класса="step_content "><Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00">//разрешить или запретить применение к конкретному актер
в классе функция TRole.CanApplyTo(AObject: TActor): boolean значение
и начинается
результат := ложь
В конце
//виртуальный метод, чтобы переопределить в потомках, которые описывает роль
в классе функция TRole.GetRoleName: строки
и начинается
результат := "
В конце
//необязательный, задает ли активные дубли разрешены или нет
в классе функция TRole.AllowActiveDuplicates: логическое
и начинается
результат := ложь
В конце
//необязательный, указывает, если дубликатов не допускается или нет (активные или неактивные);
в классе функция TRole.AllowDuplicates: логическое
и начинается
результат := ложь
В конце
//возвращает True, если любая роль, от этого зависит роль, которую должны представить в
функция TRole.Требуется: логическое и
вар
я: число
и начинается
если актер <> нулю, то
и начинается
результат := истина
для меня := 0 для актера.Роли.Счет - 1 делать
если актера.Роли[я] <> самостоятельно, то
если актера.Роли[Я].RequiresRole(самовыдвижение) тогда
на выходе
В конце
как результат := ложь
В конце
//Переопределить это, чтобы указать, если другой роли зависит от того,
функция TRole.RequiresRole(ARole: TRole): boolean значение
и начинается
результат := ложь
В конце
//заполняет производными имя роли атрибута из класса метод
в процедуре TRole._RoleName_DeriveAndSubscribe(DerivedObject: TObject абонента: TBoldSubscriber)
и начинается
унаследовала
В M_RoleName.AsString := GetRoleName
В конце
//предотвращает удаление необходимый роль
и функция TRole.MayDelete: логическое
и начинается
результат := не требуется
В конце
функции TRole.ReceiveQueryFromOwned(Отправитель: TObject OriginalEvent: TBoldEvent
и константные Аргументы: массив константный абонента: TBoldSubscriber): boolean значение
и начинается
результат := наследству ReceiveQueryFromOwned(Составитель,
В OriginalEvent, Аргументы, Абонент)
если не результат тогда выход
если (Отправитель = M_Active) тогда //Активный атрибут
и начинается
если OriginalEvent = bqMayModify затем
и начинается
если актер = шь то, что
результат := истина
и еще
если, то
и начинается
//запрет отключения если еще одна роль требует
при //этом роль активных
В результате := не требуется
если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('не могу Выключить эту роль,'
и другие роли, требующие это, я)
В )
В конце еще
и начинается
//запрет повторной активации, если еще активную роль существует
С //и дубликаты не разрешены
В результате := AllowActiveDuplicates или (не актер.HasActiveRole(Самовыдвижение.Типа класса, самостоятельно))
если не результат тогда
В SetBoldLastFailureReason(
В TBoldFailureReason.Создать('не удается активировать эту роль'
'потому что есть уже похожие активную роль, проблемы)
В )
В конце
В итоге //bqMayModify
В итоге //Активный attributeend
В конце тд>тр>элемента tbody>Таблица>р><р класса="step_content "><Стронг>
сильные>р><р класса="step_content "><р выровнять="левой">код до сих пор все было абстрактно. Все, что осталось спуститься какие-то конкретные классы от актера и роль.р><р класса="step_content "><р выровнять="левой"><Стронг><ем>
их>р><р класса="step_content "><р выровнять="центр"><размер шрифта="3"><у><Стронг><ем>заключениеих>у>шрифт>р><р класса="step_content "><р выровнять="левой"><размер шрифта="3">вместо того, что работник класс или класс клиентов, мы можем теперь легко назначают EmployeeRole или CustomerRole для любого типа лица объекта (который актер). шрифт>р><р класса="step_content "><р выровнять="левой"><размер шрифта="3">кроме того, мы можем смешивать роли, Пилот может выполнять администрация, и все может быть клиент (человек, Отдел, компания или даже Страна).шрифт>р><р класса="step_content "><р выровнять="левой"><размер шрифта="3">я надеюсь, что эта статья была информативной.шрифт>р><дел стиль= \ ясно:оба поплавка:нет'>дел><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная див>
Роль программирования в смеле
By russiatips
Роль программирования в смеле : Несколько тысяч советов, которые сделают вашу жизнь проще.