Динамической навигации для увеличения производительности

Динамической навигации для увеличения производительности


снижение или устранение навигации кода из графического интерфейса, добавив, полученных ссылок и, в то же время, повышая производительность.

и<р класса="step_content "><размер шрифта="2">занятия лепкой конструкций занимает немного подумала, а когда разобрались и чертеж и после этого запуск с помощью модели, тогда вы будете тратить ужасно много кода, обход одной для того, чтобы получить банальной информации в заданной структуре объекта. Навигация по же иногда сложная связь-пути, снова и снова занимает мощность процессора, и в нем много избыточного кода и/или выражения, обращается к тому же навигационные пути снова и снова. <размер шрифта="2">В смелой архитектуры Вы также приведет к излишним подписок из разных мест с одной и той же цели подписавшись на том же пути, снова. <р класса="step_content "><размер шрифта="2">Но с жирным шрифтом вы часто можете напрямую обратиться к ненужной навигации, избыточные навигационные код/сочленение ocl-выражений и получить снижение загрузки CPU, добавляя производные организаций, вместо того, чтобы сделать несколько стойких одной более полезным и "умным". И более того, делать это непосредственно в вашей модели ваша модель будет одновременно отражать более конкретно, какие части модели фактически используется. И как. <р класса="step_content "><размер шрифта="2">пример может показать типичную ситуацию, где добавив множество производных связей, расширения модели с более полезной информацией, приведет к более эффективным, менее избыточным и более читабельный код. Если бы речь шла традиционные ручные ремесла вы бы, наверное, подумал, что я шучу, потому что мы обычно не спасает от проблемы более путем добавления дополнительных связей между объектами...! Но я не шучу - вы на самом деле достижения всех перечисленных преимуществ, добавив несколько простых линий модели с использованием жирного шрифта.<р класса="step_content "><размер шрифта="2">пример <р класса="step_content "><размер шрифта="2">грузовик, транспортных средств может служить нам примером. Пример модели будет состоять из узлов автомобиля, некоторые участки и объект поездку сохраняя все поездки информация и расчеты. С этих трех основных категорий, которые мы в конечном итоге пишу почти 50% код (или выражения) в алгоритмах навигации основной состав, который имеет всего три постоянные ссылки... такого кодирования является тривиальной задачей, занимает много времени и не добавляет ничего ценного к системе.<р класса="step_content "><размер шрифта="2">сначала "РИЛ миру представления", например, прежде чем представлять его с помощью UML-схемы классов ("РИЛ" - это мои инициалы) : <р класса="step_content "><размер шрифта="2">рис. 1: Это транспортное средство содержит сочетание из посылок, но только перед самым VehicleUnit держит обе информация о расстояниях, мероприятий и экономических расчетов. <размер шрифта="2"><р класса="step_content "><размер шрифта="2"> 1.jpg <р класса="step_content "><размер шрифта="2">игнорировать аспекты искусства иллюстрации. <размер шрифта="2">по ряду причин, которые тут не обсуждаются, в VehicleUnits показано выше, всегда имеет вложенный объект поездку, но только перед самым объектом поездки представляет всю совокупность. Еще одна поездка объекты/калькуляторы "демобилизованных" до трейлера (возможно) будет отключен от грузовика, и тогда прицеп будет действительное ("передний мост") <размер шрифта="2">TripHolder по-своему.<р класса="step_content "><размер шрифта="2">представьте, что вы просматриваете один из узлов автомобиля или одной из посылок в пользовательском интерфейсе, и вы, вероятно, хотите знать больше о поездке связанная информация, возможно расстояниях, адреса посетил, посещение того, расходы или доходы в км и т. д. (все в ведении поездка объект). <р класса="step_content "><размер шрифта="2">Есть только три отношения в этой модели, но все равно вам придется дважды подумать, когда пытаются ориентироваться правильно, пытаясь найти "калькулятор" (здесь представление "путешествие класса"). <р класса="step_content "><размер шрифта="2">было бы еще хуже, если вы хотите реализовать некоторые общие логики или расчетов для VehicleUnits, потому что вы всегда должны убедиться, что вы ориентируетесь на "фронте большинство транспортных средств блока" (назовем его "транспортное средство"), а оттуда перейти непосредственно к поездке информация (калькулятор). <р класса="step_content "><размер шрифта="2">в реальном приложении есть так много информации, внедренных в эту базовую структуру, что три ссылки будут доступны/переход снова и снова столько раз, что многие сотни строк кода (и/или сочленение ocl выражений) было написано: "здесь, там и везде". Одна из плохих вещей в том, что если вы явно пересекают эти ссылки каждый раз, когда вам нужно получить доступ к объекта/атрибута в другой конец строения, вам нужно будет выполнить эту логику в процессоре каждый раз. <р класса="step_content "><размер шрифта="2">еще плохо то, что ваш основной бизнес-логики будет "утопить" в коде и выражений, решении этой тривиальной навигации, как "если тогда еще, для меня :=" и назначить проверку. Это где производная ссылки может помочь много, чтобы избежать логической бардак (производные атрибуты, конечно, тоже). <р класса="step_content "><размер шрифта="2">Рис. 2: простой класс модели на рисунке выше, может выглядеть следующим образом : <р класса="step_content "><размер шрифта="2">2.jpg <р класса="step_content "><размер шрифта="2">эта проблема более очевидна в этой модели классом, чем в "РИЛ Всемирная иллюстрация". <р класса="step_content "><размер шрифта="2">Если я выбрал посылку в GUI списке и нужна информация от поездки я не мог быть уверен в точной навигации путь к "мобилизовали" в обе объекта, который является тем, кто держит действительную информацию о поездке. <размер шрифта="2">пример: <р класса="step_content "><размер шрифта="2">Если посылку погрузили на прицеп выражение 'vehicleUnit.поездка будет вернуть демобилизованных объект поездки, но если посылка была загружена на эвакуатор, что будет возвращать нужные "мобилизованных" объект поездки. Это осложнение является достаточной причиной, чтобы добавить полученные ссылки в решении проблемы непосредственно в модели так, что никто никогда не будет учитывать этот фактор при разработке алгоритмов или навигационной структуры. Я определенно хотел бы добавить ссылку "EffectiveTrip" следующим образом : <р класса="step_content "><размер шрифта="2">рис. 3: ссылка называется "EffectiveTrip" был добавлен в модель. (Я всегда стараюсь пусть синий цвет представляют собой "стойкие" (="заморозка") и оранжевый, представляющих "производная" для ссылки). <р класса="step_content "><размер шрифта="2">3.jpg <р класса="step_content "><размер шрифта="2">Как я уже мог предвидеть, что данная ссылка будет доступна для многочисленных автомобиль комбинаций (в сетках и т. д.) Я бы жесткий код деривации оптимизации логики здесь, чтобы найти "самый передний" автомобиля, а это значит, что пересекая ссылка на прицеп/самосвал и останавливается, когда связь тягача равна нулю (=IsFrontMost). Оттуда мы можем ссылаться на объект поездку напрямую. Но я также знаю, что найти передний большинства автомобилей (комбинация тягача) является очень типичным и будет происходить даже чаще, чем к поездке сам объект. Я уже знаю, что ссылка EffectiveTrip также можете использовать такие производные ссылке! Давайте добавим его сразу дав ей название 'CombinationFirst'. <р класса="step_content "><размер шрифта="2">я выбрал CombinationFirst именем ' потому что тогда вы сразу поймете, типичной в этой ситуации. Это типичная проблема обработки списка. Вы уже можете себе представить полезность другого производного ссылке, которую можно назвать 'CombinationLast и даже третье звено под названием 'CombinationUnits'! <р класса="step_content "><размер шрифта="2">я могу гарантировать, что эти ссылки будет часто использоваться и, следовательно, "стоимость" оценки их будет окупились уже второй раз, когда вы используете любой из них ! <р класса="step_content "><размер шрифта="2">Рис. 4: не также выведены ссылки требуют процессора для того, чтобы быть оцененным...? вы могли бы спросить. Ответ: Да конечно - но только один раз - если подписались элементы не меняются. И это не очень вероятно, но очень "горячих точек" структура здесь будет использоваться во многих местах логика доступа к объектам пересечь очень часто и при этом одной уже прямо ссылается на экземпляры, которые вы хотите открыть. Посмотрите на "бардак" ниже... ! :<р класса="step_content "><размер шрифта="2"><р класса="step_content "><размер шрифта="2"> 4.jpg <р класса="step_content "><размер шрифта="2">Это высокопроизводительное решение с использованием модели как инструмент для оптимизации, и в то же время, дополнительные ссылки, уточнения/с указанием непосредственно в модели предполагаемого использования этого конкретного строения ! <р класса="step_content "><размер шрифта="2">Для тех из вас, кто думает, что я окончательно разозлился я могу сказать, что я не. Вместо этого я увеличил скорость вычислений и все мероприятия, связанные с этой структурой в реальных приложениях с многих тысяч процентов по сравнению с явного определения весь путь каждый раз комбинации поездку или на конкретный автомобиль блок (или атрибут в любом из них) была доступна ! <р класса="step_content "><размер шрифта="2">Все виды данных хранятся в этой структуре и более 30 производных атрибутов для различных вычислений обращается к структуре взад и вперед все время, предоставив клиенту пользователя в режиме реального времени с расчетами доходов/км и расстояния, расстояния акций составляет, доля акций... и т. д. и т. п. <р класса="step_content "><размер шрифта="2">дело в том, чтобы позволить производных ссылке использовать другие ссылки, как часто попу можно, то даже необходимость пересмотра одной, когда все изменения уменьшается! <р класса="step_content "><размер шрифта="2">последнее утверждение можно проверить очень четко с отдельным примере показывая, как важно "использовать" все, что вы получаете на каждом более высоком уровне (в отношении которых частью структуры более вероятно, изменится и какая часть является более "статический"). С "повторное использование" в смысле "процессор уже проделанной работы", при выведении ссылке. Более подробно об этом может быть темой отдельной статьи.

<див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ"> <див класс="блок-внутренний"> <див класс="содержание"> <див класс="блок-дна"> <див класс='embed_block_1'><див>

<размер шрифта="2">теперь посмотрим на код. Нам нужно достать поездки объекта (для некоторых резонансов), начиная с участка, но мы не знаем, на что VehicleUnit мы загружены, поэтому мы начинаем искать его, используя ссылку "EffectiveTrip", который "скрывает" логика определения того, какие поездки объекта "мобилизовал" (я.е "эффективного") : <р класса="step_content "><размер шрифта="2">
<Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00"><размер шрифта="2">функция в TParcel.CalculateTrip_Something...: двухместная
ивар
В TripObj : TTrip
начать
В TripObj := vehicleUnit.effectiveTrip // вот именно! ... <р класса="step_content "><р класса="step_content "><размер шрифта="2">легко, это ясный код. Подробности о том, как мы заполучили правильный объект поездку не следует смешивать бизнес-логику, касающиеся доступа или расчетов в структуре объекта. <р класса="step_content "><размер шрифта="2">В нашем реальном мире приложение VehicleUnits и посылки имеют общий супер-класс (не показано здесь). Автомобиль может быть погружен на другое транспортное средство, как и любые другие посылки, так что приведенный выше код-это еще проще в моем окончательной общая модель, в которой выведены ссылки "виртуальный перекрытая" в разных подклассов. Мой окончательный код выглядит так : <р класса="step_content "><Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00"><размер шрифта="2"><Стронг>
начать
В TripObj := effectiveTrip // вот именно! <р класса="step_content "><размер шрифта="2">посылка найдет своего действительного поездки, используя эту команду, независимо от того, насколько сложен путь может быть. Это показано на рис. 5, где новый общий супер-класс на самом деле владеет стойким и производные ссылка на класс перелета и EffectiveTrip-связь реализуется первый в TParcel а затем перекрытая для VehicleUnit класса, как показано ниже. <р класса="step_content "><размер шрифта="2">Рис. 5: здесь я изменил модель, чтобы стать более универсальным допуская "planable объекта" перевезти партию других planable объектов - и как модель более универсальную роль имен тоже так делать. <р класса="step_content "><размер шрифта="2">
5.jpg <р класса="step_content "><размер шрифта="2"><р класса="step_content "><размер шрифта="2">информация о поездке применяется непосредственно за посылку тоже (через AbstractPlanPortion) потому что транспортная компания может планировать посылка должна быть доставлена, например, самолет, который насчитывает нам не интересно - но мы по-прежнему заинтересованы в отслеживании любую поездку событий, происходящих в реальной перевозке, а также документации и проводок прикрепил к посылке в себе и т. д. Но это также означает, что когда есть необходимость доступа к "эффективным" в обе объектом, мы также не нужно выполнять очень сложные проверки всей структуры пытаются выяснить, в каком контексте (правильно, "мобилизованные") поездка объект может быть найден... это будет действительно принять наша логика несколько сложным для такой простой вещи, как просто получение некоторых данных из структуры. Настоящий кошмар на самом деле... <р класса="step_content "><размер шрифта="2">Это осложнение простая вещь очень не однозначная. Что является уникальным как с этим можно справиться, используя смелые технологии с его производными одной. <р класса="step_content "><размер шрифта="2">посылка может быть TripHolder себя, или, если участок загружен на носитель он не знает, заряжен он или нет о том, какой перевозчик фактически держит бутылку шампанского. Мы действительно должны сделать некоторые navigatiion здесь. В такой ситуации вы легко можете себе представить, сколько кодирование и насколько сложное сочленение ocl выражений будет доступа к информации в структуре. Ваш основной бизнес-логики будет "утопить" в навигации логики, когда просто получая тривиальные вещи от структуры и процессор будет тратить много времени на поиск своего пути(s) к целевым объектам/данных.<р класса="step_content "><р /><р класса="step_content "><размер шрифта="2">и наконец : три (3) стойких одной холдинговой структуре все вместе оказались в еще пять (5) очень полезно, полученных одной ! В результате того, что конечное приложение работает намного быстрее и бизнес-логики проходит еще, помимо банальной навигации бесконечно пересекая структуры объекта. <р класса="step_content "><размер шрифта="2">перед перечислением наиболее эффективного кода для оптимизирован жестко производные от одной, хотелось бы сделать вывод, что с этими ссылками вы можете, находясь в любой точке структуры, куда угодно - прямо - на ссылка члены с именами, полностью прояснив, что вы хотите открыть, и это будет сделано наиболее эффективным образом, Вы можете придумать, используя обычный жирный архитектуры. <р класса="step_content "><размер шрифта="2">с "эффективными" в смысле "всегда прямой доступ к необходимой целевой объект экземпляр" (за исключением первой оценки, которая в моем случае происходит только один раз за сотни обращений...). <р класса="step_content "><размер шрифта="2">это лишь часть понятий мы использовали сознательно, чтобы сделать возможным то, что было невозможно раньше : с помощью регулярных, но "чистый дизайн", по образцу и структурированный объектно-ориентированный бизнес-класса высокой производительности в режиме реального времени (пере)вычисления очень продвинутый обе расчетов (здесь не обсуждается). На один процессор (сервер приложений) для нескольких клиентов. <р класса="step_content "><р /><р класса="step_content "><р /><р класса="step_content "><размер шрифта="2">Деривации код, с комментариями<р класса="step_content "><размер шрифта="2">в коде ниже я подчеркнул все внутренние ссылки из полученных ссылок ("эффективное повторное использование уже оценивали результаты"). <р класса="step_content "><размер шрифта="2">я также использовать локальные переменные, что позволяет избежать внутренних "искать" смелых членов больше чем один раз (=> избегая повторного инициирования внутренних смелый событий и т. д.). <р класса="step_content "><размер шрифта="2">эффективность всей концепции обсуждены и детального кодирования ниже проверяется с помощью ProDelphi профайлер (очень высокая точность ( -3%) на код измерения производительности). <р класса="step_content "><размер шрифта="2">
<Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00"> { TParcel }



процедура TParcel._EffectiveTrip_DeriveAndSubscribe(...)
// если загружена носители (эффективного) командировки вернулся,
при// еще местные командировки (если есть).
вар
В CarrierObj: TVehicleUnit
В ResultValue : TTrip
и начинается
M_batchHolder.DefaultSubscribe(Абонент, breResubscribe)
В CarrierObj := batchHolder
если назначат(CarrierObj) тогда
и начинается
CarrierObj.M_EffectiveTrip.DefaultSubscribe(Абонент, breResubscribe)
В ResultValue := CarrierObj.EffectiveTrip
В конце
и еще
и начинается
M_trip.DefaultSubscribe(Абонент, breResubscribe)
В ResultValue := путешествие
В конце
В M_EffectiveTrip.BoldObject := ResultValue
В конце



{ TVehicleUnit }



процедура TVehicleUnit._EffectiveTrip_DeriveAndSubscribe(...)
вар
В HaulerObj: TVehicleUnit
В ResultValue,
В TripObj: TTrip
и начинается
ResultValue := мь
В M_CombinationFirst.DefaultSubscribe(Абонент, breResubscribe)
В HaulerObj := CombinationFirst
при // ходовую уже сделали здесь
если назначат(HaulerObj) тогда
и начинается
HaulerObj.M_Trip.DefaultSubscribe(Абонент, breResubscribe)
В TripObj := HaulerObj.поездки
если назначат(TripObj) тогда
и начинается
TripObj.M_IsMobilized.DefaultSubscribe(Абонент)
если TripObj.IsMobilized то, что
ResultValue := TripObj
В конце
В конце
В M_EffectiveTrip.BoldObject := ResultValue
В конце



процедура TVehicleUnit._CombinationFirst_DeriveAndSubscribe(...)
при// данная ссылка будет быстро "короткий путь" использовано много много
// функций в этой области и иных связей и атрибутов, таким образом, чтобы
// смысл оптимизации, а не "массовка" или "конфеты" в модели.
вар
В LoopObj: TVehicleUnit
и начинается
LoopObj := Собственн // траверс вперед
В LoopObj.M_hauler.DefaultSubscribe(Абонент, breResubscribe)
В то время как назначено(LoopObj.Бурлак) делать
и начинается
LoopObj := LoopObj.Бурлак
В LoopObj.M_hauler.DefaultSubscribe(Абонент, breResubscribe)
В конце
В M_CombinationFirst.BoldObject := LoopObj
В конце




процедура TVehicleUnit._CombinationLast_DeriveAndSubscribe(DerivedObject: TObject абонента: TBoldSubscriber)
вар
В LoopObj: TVehicleUnit
и начинается
LoopObj := я,
В LoopObj.M_trailer.DefaultSubscribe(Абонент, breResubscribe)
В то время как назначено(LoopObj.трейлер) делать
и начинается
LoopObj := LoopObj.трейлер
В LoopObj.M_trailer.DefaultSubscribe(Абонент, breResubscribe)
В конце
В M_CombinationLast.BoldObject := LoopObj
В конце




процедура TVehicleUnit.CombinationUnits_DeriveAndSubscribe(...)
вар
В LoopObj: TVehicleUnit
В ResultList: TBoldObjectList
и начинается
M_CombinationUnits.Понятно, что
ResultList := TBoldObjectList.Создавать

и M_CombinationFirst.DefaultSubscribe(Абонент, breResubscribe)
В LoopObj := CombinationFirst
повторять
В ResultList.Добавить(LoopObj)
В LoopObj.M_trailer.DefaultSubscribe(Абонент, breResubscribe)
В LoopObj := LoopObj.трейлер
пока LoopObj = мь
и наконец
В M_CombinationUnits.Списке addlist(ResultList)
FreeAndNil(ResultList)
В конце
В конце




процедура TVehicleUnit._CombinationLoadItems_DeriveAndSubscribe(DerivedObject: TObject абонента: TBoldSubscriber)
в// список собрав все (партию)элементы загружены на любой блок в
при// транспортных средств. Реализовано для удобства и
// clearification.
вар
В UnitCnt, я: целое число
В UnitObj: TVehicleUnit
и начинается
M_CombinationLoadItems.Понятно, что
CombinationUnits.DefaultSubscribe(Абонент, breResubscribe)
В UnitCnt := CombinationUnits.Граф
если UnitCnt > 0 тогда
и начинается
для i := 0 до UnitCnt-1 сделать
и начинается
UnitObj := CombinationUnits[я]
В UnitObj.loadedItems.EnsureObjects
В UnitObj.loadedItems.DefaultSubscribe(Абонент) и
// собрать все, если UnitObj.loadedItems.Количество > 0 тогда
В M_CombinationLoadItems.Списке Addlist(UnitObj.loadedItems)
В конце
В конце
В конце <р класса="step_content "><шрифта лицо="новый курьер,курьер,моноширинный шрифт">// Рольф лампе<р класса="step_content ">(нынешний адрес: Рольф-дот-лампа на рилнет-дот-ком)<р класса="step_content "><размер шрифта="2"><размер шрифта="2"><р класса="step_content "><шрифта лицо="новый курьер,курьер,моноширинный шрифт"><р класса="step_content "><дел стиль= \ ясно:оба поплавка:ни одна'><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная








Динамической навигации для увеличения производительности


Динамической навигации для увеличения производительности : Несколько тысяч советов, которые сделают вашу жизнь проще.


снижение или устранение навигации кода из графического интерфейса, добавив, полученных ссылок и, в то же время, повышая производительность.

и<р класса="step_content "><размер шрифта="2">занятия лепкой конструкций занимает немного подумала, а когда разобрались и чертеж и после этого запуск с помощью модели, тогда вы будете тратить ужасно много кода, обход одной для того, чтобы получить банальной информации в заданной структуре объекта. Навигация по же иногда сложная связь-пути, снова и снова занимает мощность процессора, и в нем много избыточного кода и/или выражения, обращается к тому же навигационные пути снова и снова. <размер шрифта="2">В смелой архитектуры Вы также приведет к излишним подписок из разных мест с одной и той же цели подписавшись на том же пути, снова. <р класса="step_content "><размер шрифта="2">Но с жирным шрифтом вы часто можете напрямую обратиться к ненужной навигации, избыточные навигационные код/сочленение ocl-выражений и получить снижение загрузки CPU, добавляя производные организаций, вместо того, чтобы сделать несколько стойких одной более полезным и "умным". И более того, делать это непосредственно в вашей модели ваша модель будет одновременно отражать более конкретно, какие части модели фактически используется. И как. <р класса="step_content "><размер шрифта="2">пример может показать типичную ситуацию, где добавив множество производных связей, расширения модели с более полезной информацией, приведет к более эффективным, менее избыточным и более читабельный код. Если бы речь шла традиционные ручные ремесла вы бы, наверное, подумал, что я шучу, потому что мы обычно не спасает от проблемы более путем добавления дополнительных связей между объектами...! Но я не шучу - вы на самом деле достижения всех перечисленных преимуществ, добавив несколько простых линий модели с использованием жирного шрифта.<р класса="step_content "><размер шрифта="2">пример <р класса="step_content "><размер шрифта="2">грузовик, транспортных средств может служить нам примером. Пример модели будет состоять из узлов автомобиля, некоторые участки и объект поездку сохраняя все поездки информация и расчеты. С этих трех основных категорий, которые мы в конечном итоге пишу почти 50% код (или выражения) в алгоритмах навигации основной состав, который имеет всего три постоянные ссылки... такого кодирования является тривиальной задачей, занимает много времени и не добавляет ничего ценного к системе.<р класса="step_content "><размер шрифта="2">сначала "РИЛ миру представления", например, прежде чем представлять его с помощью UML-схемы классов ("РИЛ" - это мои инициалы) : <р класса="step_content "><размер шрифта="2">рис. 1: Это транспортное средство содержит сочетание из посылок, но только перед самым VehicleUnit держит обе информация о расстояниях, мероприятий и экономических расчетов. <размер шрифта="2"><р класса="step_content "><размер шрифта="2"> 1.jpg <р класса="step_content "><размер шрифта="2">игнорировать аспекты искусства иллюстрации. <размер шрифта="2">по ряду причин, которые тут не обсуждаются, в VehicleUnits показано выше, всегда имеет вложенный объект поездку, но только перед самым объектом поездки представляет всю совокупность. Еще одна поездка объекты/калькуляторы "демобилизованных" до трейлера (возможно) будет отключен от грузовика, и тогда прицеп будет действительное ("передний мост") <размер шрифта="2">TripHolder по-своему.<р класса="step_content "><размер шрифта="2">представьте, что вы просматриваете один из узлов автомобиля или одной из посылок в пользовательском интерфейсе, и вы, вероятно, хотите знать больше о поездке связанная информация, возможно расстояниях, адреса посетил, посещение того, расходы или доходы в км и т. д. (все в ведении поездка объект). <р класса="step_content "><размер шрифта="2">Есть только три отношения в этой модели, но все равно вам придется дважды подумать, когда пытаются ориентироваться правильно, пытаясь найти "калькулятор" (здесь представление "путешествие класса"). <р класса="step_content "><размер шрифта="2">было бы еще хуже, если вы хотите реализовать некоторые общие логики или расчетов для VehicleUnits, потому что вы всегда должны убедиться, что вы ориентируетесь на "фронте большинство транспортных средств блока" (назовем его "транспортное средство"), а оттуда перейти непосредственно к поездке информация (калькулятор). <р класса="step_content "><размер шрифта="2">в реальном приложении есть так много информации, внедренных в эту базовую структуру, что три ссылки будут доступны/переход снова и снова столько раз, что многие сотни строк кода (и/или сочленение ocl выражений) было написано: "здесь, там и везде". Одна из плохих вещей в том, что если вы явно пересекают эти ссылки каждый раз, когда вам нужно получить доступ к объекта/атрибута в другой конец строения, вам нужно будет выполнить эту логику в процессоре каждый раз. <р класса="step_content "><размер шрифта="2">еще плохо то, что ваш основной бизнес-логики будет "утопить" в коде и выражений, решении этой тривиальной навигации, как "если тогда еще, для меня :=" и назначить проверку. Это где производная ссылки может помочь много, чтобы избежать логической бардак (производные атрибуты, конечно, тоже). <р класса="step_content "><размер шрифта="2">Рис. 2: простой класс модели на рисунке выше, может выглядеть следующим образом : <р класса="step_content "><размер шрифта="2">2.jpg <р класса="step_content "><размер шрифта="2">эта проблема более очевидна в этой модели классом, чем в "РИЛ Всемирная иллюстрация". <р класса="step_content "><размер шрифта="2">Если я выбрал посылку в GUI списке и нужна информация от поездки я не мог быть уверен в точной навигации путь к "мобилизовали" в обе объекта, который является тем, кто держит действительную информацию о поездке. <размер шрифта="2">пример: <р класса="step_content "><размер шрифта="2">Если посылку погрузили на прицеп выражение 'vehicleUnit.поездка будет вернуть демобилизованных объект поездки, но если посылка была загружена на эвакуатор, что будет возвращать нужные "мобилизованных" объект поездки. Это осложнение является достаточной причиной, чтобы добавить полученные ссылки в решении проблемы непосредственно в модели так, что никто никогда не будет учитывать этот фактор при разработке алгоритмов или навигационной структуры. Я определенно хотел бы добавить ссылку "EffectiveTrip" следующим образом : <р класса="step_content "><размер шрифта="2">рис. 3: ссылка называется "EffectiveTrip" был добавлен в модель. (Я всегда стараюсь пусть синий цвет представляют собой "стойкие" (="заморозка") и оранжевый, представляющих "производная" для ссылки). <р класса="step_content "><размер шрифта="2">3.jpg <р класса="step_content "><размер шрифта="2">Как я уже мог предвидеть, что данная ссылка будет доступна для многочисленных автомобиль комбинаций (в сетках и т. д.) Я бы жесткий код деривации оптимизации логики здесь, чтобы найти "самый передний" автомобиля, а это значит, что пересекая ссылка на прицеп/самосвал и останавливается, когда связь тягача равна нулю (=IsFrontMost). Оттуда мы можем ссылаться на объект поездку напрямую. Но я также знаю, что найти передний большинства автомобилей (комбинация тягача) является очень типичным и будет происходить даже чаще, чем к поездке сам объект. Я уже знаю, что ссылка EffectiveTrip также можете использовать такие производные ссылке! Давайте добавим его сразу дав ей название 'CombinationFirst'. <р класса="step_content "><размер шрифта="2">я выбрал CombinationFirst именем ' потому что тогда вы сразу поймете, типичной в этой ситуации. Это типичная проблема обработки списка. Вы уже можете себе представить полезность другого производного ссылке, которую можно назвать 'CombinationLast и даже третье звено под названием 'CombinationUnits'! <р класса="step_content "><размер шрифта="2">я могу гарантировать, что эти ссылки будет часто использоваться и, следовательно, "стоимость" оценки их будет окупились уже второй раз, когда вы используете любой из них ! <р класса="step_content "><размер шрифта="2">Рис. 4: не также выведены ссылки требуют процессора для того, чтобы быть оцененным...? вы могли бы спросить. Ответ: Да конечно - но только один раз - если подписались элементы не меняются. И это не очень вероятно, но очень "горячих точек" структура здесь будет использоваться во многих местах логика доступа к объектам пересечь очень часто и при этом одной уже прямо ссылается на экземпляры, которые вы хотите открыть. Посмотрите на "бардак" ниже... ! :<р класса="step_content "><размер шрифта="2"><р класса="step_content "><размер шрифта="2"> 4.jpg <р класса="step_content "><размер шрифта="2">Это высокопроизводительное решение с использованием модели как инструмент для оптимизации, и в то же время, дополнительные ссылки, уточнения/с указанием непосредственно в модели предполагаемого использования этого конкретного строения ! <р класса="step_content "><размер шрифта="2">Для тех из вас, кто думает, что я окончательно разозлился я могу сказать, что я не. Вместо этого я увеличил скорость вычислений и все мероприятия, связанные с этой структурой в реальных приложениях с многих тысяч процентов по сравнению с явного определения весь путь каждый раз комбинации поездку или на конкретный автомобиль блок (или атрибут в любом из них) была доступна ! <р класса="step_content "><размер шрифта="2">Все виды данных хранятся в этой структуре и более 30 производных атрибутов для различных вычислений обращается к структуре взад и вперед все время, предоставив клиенту пользователя в режиме реального времени с расчетами доходов/км и расстояния, расстояния акций составляет, доля акций... и т. д. и т. п. <р класса="step_content "><размер шрифта="2">дело в том, чтобы позволить производных ссылке использовать другие ссылки, как часто попу можно, то даже необходимость пересмотра одной, когда все изменения уменьшается! <р класса="step_content "><размер шрифта="2">последнее утверждение можно проверить очень четко с отдельным примере показывая, как важно "использовать" все, что вы получаете на каждом более высоком уровне (в отношении которых частью структуры более вероятно, изменится и какая часть является более "статический"). С "повторное использование" в смысле "процессор уже проделанной работы", при выведении ссылке. Более подробно об этом может быть темой отдельной статьи.

<див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ"> <див класс="блок-внутренний"> <див класс="содержание"> <див класс="блок-дна"> <див класс='embed_block_1'><див>

<размер шрифта="2">теперь посмотрим на код. Нам нужно достать поездки объекта (для некоторых резонансов), начиная с участка, но мы не знаем, на что VehicleUnit мы загружены, поэтому мы начинаем искать его, используя ссылку "EffectiveTrip", который "скрывает" логика определения того, какие поездки объекта "мобилизовал" (я.е "эффективного") : <р класса="step_content "><размер шрифта="2">
<Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00"><размер шрифта="2">функция в TParcel.CalculateTrip_Something...: двухместная
ивар
В TripObj : TTrip
начать
В TripObj := vehicleUnit.effectiveTrip // вот именно! ... <р класса="step_content "><р класса="step_content "><размер шрифта="2">легко, это ясный код. Подробности о том, как мы заполучили правильный объект поездку не следует смешивать бизнес-логику, касающиеся доступа или расчетов в структуре объекта. <р класса="step_content "><размер шрифта="2">В нашем реальном мире приложение VehicleUnits и посылки имеют общий супер-класс (не показано здесь). Автомобиль может быть погружен на другое транспортное средство, как и любые другие посылки, так что приведенный выше код-это еще проще в моем окончательной общая модель, в которой выведены ссылки "виртуальный перекрытая" в разных подклассов. Мой окончательный код выглядит так : <р класса="step_content "><Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00"><размер шрифта="2"><Стронг>
начать
В TripObj := effectiveTrip // вот именно! <р класса="step_content "><размер шрифта="2">посылка найдет своего действительного поездки, используя эту команду, независимо от того, насколько сложен путь может быть. Это показано на рис. 5, где новый общий супер-класс на самом деле владеет стойким и производные ссылка на класс перелета и EffectiveTrip-связь реализуется первый в TParcel а затем перекрытая для VehicleUnit класса, как показано ниже. <р класса="step_content "><размер шрифта="2">Рис. 5: здесь я изменил модель, чтобы стать более универсальным допуская "planable объекта" перевезти партию других planable объектов - и как модель более универсальную роль имен тоже так делать. <р класса="step_content "><размер шрифта="2">
5.jpg <р класса="step_content "><размер шрифта="2"><р класса="step_content "><размер шрифта="2">информация о поездке применяется непосредственно за посылку тоже (через AbstractPlanPortion) потому что транспортная компания может планировать посылка должна быть доставлена, например, самолет, который насчитывает нам не интересно - но мы по-прежнему заинтересованы в отслеживании любую поездку событий, происходящих в реальной перевозке, а также документации и проводок прикрепил к посылке в себе и т. д. Но это также означает, что когда есть необходимость доступа к "эффективным" в обе объектом, мы также не нужно выполнять очень сложные проверки всей структуры пытаются выяснить, в каком контексте (правильно, "мобилизованные") поездка объект может быть найден... это будет действительно принять наша логика несколько сложным для такой простой вещи, как просто получение некоторых данных из структуры. Настоящий кошмар на самом деле... <р класса="step_content "><размер шрифта="2">Это осложнение простая вещь очень не однозначная. Что является уникальным как с этим можно справиться, используя смелые технологии с его производными одной. <р класса="step_content "><размер шрифта="2">посылка может быть TripHolder себя, или, если участок загружен на носитель он не знает, заряжен он или нет о том, какой перевозчик фактически держит бутылку шампанского. Мы действительно должны сделать некоторые navigatiion здесь. В такой ситуации вы легко можете себе представить, сколько кодирование и насколько сложное сочленение ocl выражений будет доступа к информации в структуре. Ваш основной бизнес-логики будет "утопить" в навигации логики, когда просто получая тривиальные вещи от структуры и процессор будет тратить много времени на поиск своего пути(s) к целевым объектам/данных.<р класса="step_content "><р /><р класса="step_content "><размер шрифта="2">и наконец : три (3) стойких одной холдинговой структуре все вместе оказались в еще пять (5) очень полезно, полученных одной ! В результате того, что конечное приложение работает намного быстрее и бизнес-логики проходит еще, помимо банальной навигации бесконечно пересекая структуры объекта. <р класса="step_content "><размер шрифта="2">перед перечислением наиболее эффективного кода для оптимизирован жестко производные от одной, хотелось бы сделать вывод, что с этими ссылками вы можете, находясь в любой точке структуры, куда угодно - прямо - на ссылка члены с именами, полностью прояснив, что вы хотите открыть, и это будет сделано наиболее эффективным образом, Вы можете придумать, используя обычный жирный архитектуры. <р класса="step_content "><размер шрифта="2">с "эффективными" в смысле "всегда прямой доступ к необходимой целевой объект экземпляр" (за исключением первой оценки, которая в моем случае происходит только один раз за сотни обращений...). <р класса="step_content "><размер шрифта="2">это лишь часть понятий мы использовали сознательно, чтобы сделать возможным то, что было невозможно раньше : с помощью регулярных, но "чистый дизайн", по образцу и структурированный объектно-ориентированный бизнес-класса высокой производительности в режиме реального времени (пере)вычисления очень продвинутый обе расчетов (здесь не обсуждается). На один процессор (сервер приложений) для нескольких клиентов. <р класса="step_content "><р /><р класса="step_content "><р /><р класса="step_content "><размер шрифта="2">Деривации код, с комментариями<р класса="step_content "><размер шрифта="2">в коде ниже я подчеркнул все внутренние ссылки из полученных ссылок ("эффективное повторное использование уже оценивали результаты"). <р класса="step_content "><размер шрифта="2">я также использовать локальные переменные, что позволяет избежать внутренних "искать" смелых членов больше чем один раз (=> избегая повторного инициирования внутренних смелый событий и т. д.). <р класса="step_content "><размер шрифта="2">эффективность всей концепции обсуждены и детального кодирования ниже проверяется с помощью ProDelphi профайлер (очень высокая точность ( -3%) на код измерения производительности). <р класса="step_content "><размер шрифта="2">
<Ширина таблицы="100%" граница="0"><элемента tbody><тр><тд для bgcolor="#ffff00"> { TParcel }



процедура TParcel._EffectiveTrip_DeriveAndSubscribe(...)
// если загружена носители (эффективного) командировки вернулся,
при// еще местные командировки (если есть).
вар
В CarrierObj: TVehicleUnit
В ResultValue : TTrip
и начинается
M_batchHolder.DefaultSubscribe(Абонент, breResubscribe)
В CarrierObj := batchHolder
если назначат(CarrierObj) тогда
и начинается
CarrierObj.M_EffectiveTrip.DefaultSubscribe(Абонент, breResubscribe)
В ResultValue := CarrierObj.EffectiveTrip
В конце
и еще
и начинается
M_trip.DefaultSubscribe(Абонент, breResubscribe)
В ResultValue := путешествие
В конце
В M_EffectiveTrip.BoldObject := ResultValue
В конце



{ TVehicleUnit }



процедура TVehicleUnit._EffectiveTrip_DeriveAndSubscribe(...)
вар
В HaulerObj: TVehicleUnit
В ResultValue,
В TripObj: TTrip
и начинается
ResultValue := мь
В M_CombinationFirst.DefaultSubscribe(Абонент, breResubscribe)
В HaulerObj := CombinationFirst
при // ходовую уже сделали здесь
если назначат(HaulerObj) тогда
и начинается
HaulerObj.M_Trip.DefaultSubscribe(Абонент, breResubscribe)
В TripObj := HaulerObj.поездки
если назначат(TripObj) тогда
и начинается
TripObj.M_IsMobilized.DefaultSubscribe(Абонент)
если TripObj.IsMobilized то, что
ResultValue := TripObj
В конце
В конце
В M_EffectiveTrip.BoldObject := ResultValue
В конце



процедура TVehicleUnit._CombinationFirst_DeriveAndSubscribe(...)
при// данная ссылка будет быстро "короткий путь" использовано много много
// функций в этой области и иных связей и атрибутов, таким образом, чтобы
// смысл оптимизации, а не "массовка" или "конфеты" в модели.
вар
В LoopObj: TVehicleUnit
и начинается
LoopObj := Собственн // траверс вперед
В LoopObj.M_hauler.DefaultSubscribe(Абонент, breResubscribe)
В то время как назначено(LoopObj.Бурлак) делать
и начинается
LoopObj := LoopObj.Бурлак
В LoopObj.M_hauler.DefaultSubscribe(Абонент, breResubscribe)
В конце
В M_CombinationFirst.BoldObject := LoopObj
В конце




процедура TVehicleUnit._CombinationLast_DeriveAndSubscribe(DerivedObject: TObject абонента: TBoldSubscriber)
вар
В LoopObj: TVehicleUnit
и начинается
LoopObj := я,
В LoopObj.M_trailer.DefaultSubscribe(Абонент, breResubscribe)
В то время как назначено(LoopObj.трейлер) делать
и начинается
LoopObj := LoopObj.трейлер
В LoopObj.M_trailer.DefaultSubscribe(Абонент, breResubscribe)
В конце
В M_CombinationLast.BoldObject := LoopObj
В конце




процедура TVehicleUnit.CombinationUnits_DeriveAndSubscribe(...)
вар
В LoopObj: TVehicleUnit
В ResultList: TBoldObjectList
и начинается
M_CombinationUnits.Понятно, что
ResultList := TBoldObjectList.Создавать

и M_CombinationFirst.DefaultSubscribe(Абонент, breResubscribe)
В LoopObj := CombinationFirst
повторять
В ResultList.Добавить(LoopObj)
В LoopObj.M_trailer.DefaultSubscribe(Абонент, breResubscribe)
В LoopObj := LoopObj.трейлер
пока LoopObj = мь
и наконец
В M_CombinationUnits.Списке addlist(ResultList)
FreeAndNil(ResultList)
В конце
В конце




процедура TVehicleUnit._CombinationLoadItems_DeriveAndSubscribe(DerivedObject: TObject абонента: TBoldSubscriber)
в// список собрав все (партию)элементы загружены на любой блок в
при// транспортных средств. Реализовано для удобства и
// clearification.
вар
В UnitCnt, я: целое число
В UnitObj: TVehicleUnit
и начинается
M_CombinationLoadItems.Понятно, что
CombinationUnits.DefaultSubscribe(Абонент, breResubscribe)
В UnitCnt := CombinationUnits.Граф
если UnitCnt > 0 тогда
и начинается
для i := 0 до UnitCnt-1 сделать
и начинается
UnitObj := CombinationUnits[я]
В UnitObj.loadedItems.EnsureObjects
В UnitObj.loadedItems.DefaultSubscribe(Абонент) и
// собрать все, если UnitObj.loadedItems.Количество > 0 тогда
В M_CombinationLoadItems.Списке Addlist(UnitObj.loadedItems)
В конце
В конце
В конце <р класса="step_content "><шрифта лицо="новый курьер,курьер,моноширинный шрифт">// Рольф лампе<р класса="step_content ">(нынешний адрес: Рольф-дот-лампа на рилнет-дот-ком)<р класса="step_content "><размер шрифта="2"><размер шрифта="2"><р класса="step_content "><шрифта лицо="новый курьер,курьер,моноширинный шрифт"><р класса="step_content "><дел стиль= \ ясно:оба поплавка:ни одна'><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная

Динамической навигации для увеличения производительности

Динамической навигации для увеличения производительности : Несколько тысяч советов, которые сделают вашу жизнь проще.
рекомендовать друзьям
  • gplus
  • pinterest

Комментарий

Оставить комментарий

Оценивать