Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
     Мой ответ 1) расчитан на новичка, б) решает задачу, в) решает ее с некоторым запасом, на вырост

    согласен  
    с небольшой добавкой:
    г)запас все-таки не очень большой
    д)решение в духе порождать говнокод, для маленьких проектов, впринципе подходит, спору нет.
     
    ну чей ответ оптимален, пусть считает автор, в конце-концов; речь сейчас вобще о 'правильном' подходе.
     
    Добавлено:
    XPerformer
    на самом деле, то, что ты пытаешься показать - называется умным словом АОП, только с реализацией через ж..

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 23:40 06-11-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    A_V
    Говнокод - вкусное слово, так и хочется его повторять, сам через это прохожу.
     
    Но на самом деле, то что я пытаюсь показать, описано здесь
    http://ru.wikipedia.org/wiki/Сервис-ориентированная_архитектура
     
    Но грузить этим новичков не нужно, ибо - не понял и не поймешь, судя по всему, ибо - не хочешь
     
    Добавлено:
    извини, если погорячился с выводом, но просто уже не могу ждать, пока услышишь основную мысль

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 00:09 07-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer
    ага, я знаю карате, теквондо, и еще много страшных слов..
     
    Основная твоя мысль в контексте топика, как я понял - есть у контролов события, на которых можно реализовать собственное поведение, не меняя сам контрол, значит так и надо делать. Это просто аспект работы с контролом, который привязывается сторонним образом (службой).  
     
    Моя мысль - нет, в таком виде, как ты описываешь, делать совсем не надо и сильно вредно и это порождает то самое 'вкусное слово' (особо памятуя, что в delphi нет multicast event'ов (вернее есть но через очень большую Ж)). Т.е наследник контрола в данном случае все равно быть должен. Подробно расписывать уже лень, и нужно это делать на нормальных примерах и с кодом.

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 00:40 07-11-2012 | Исправлено: A_V, 00:49 07-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer

    Цитата:
    В делфи нет множественного наследования

    Не Ваш день сегодня... Причем здесь множественное наследование в принципе?!?!
     
    1) расчитан на новичка...
    судя по 'protected' фэйлу - это не на новичка, это в крови. Вы же упорно доказываете (и продолжаете это делать), что это не кашерно
     
    2) решает задачу  
    тут согласен. сию минутную задачу да, но КРИВО, НЕ ЭФФЕКТИВНО ( и по скорости исполнения, и по реализации, и по поддержке)
     
    3) насчет некоторого запаса  
    читай выше... НИКАКОГО запаса (кроме запаса гемора) в этом решении НЕТ
     
     
    а вот это "Сервис-ориентированная архитектура" - лучше вообще удалите из поста!
    Где вы у себя видели слабую связность????
     
    Для 3 разных модулей с разной раскраской контролов Ваш код превратится в ТАКУЮ кашу, что Вы начнете просто плеваться от кода...
     
    Сервис-ориентированная архитектура - если бы Вы предложили реализацию какого-то универсального интерфейса, который легко мог бы изменяться в зависимости от формы - я бы еще как-то с натяжкой сказал бы - YES!!! IT's TRUE!!!!
     
    А так - ни о чем....
     
    З.Ы. Ваш пример не говнокод (в прямом его смысле) - но где-то очень близко... Sorry!!!

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 02:07 07-11-2012 | Исправлено: salexn1, 02:10 07-11-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    salexn1
    Цитата для тех, кто поленился пройти по ссылке выше:
    "Главное, что отличает SOA, это использование независимых сервисов с чётко определёнными интерфейсами, которые для выполнения своих задач могут быть вызваны неким стандартным способом, при условии, что сервисы заранее ничего не знают о приложении, которое их вызовет, а приложение не знает, каким образом сервисы выполняют свою задачу."
     
    Что имеем у нас:
    1) событие 1 "Рак на горе свистнул" - сервис не знает, кто такой рак и как он свистит (и не стремится узнать)
    2) реакция приложения "перекраситься" - выполняет сервис 1
    3) реакция приложения "бибикнуть" - выполняет сервис 2
    4) приложение дергает сервисы в нужный момент.  
    На делфи это можно организовать как некий цикл (типа оконной процедуры), который себе крутится и проверяет, а не свистнул ли рак, а не нажал ли юзер кнопку, а не 13-00, четверг ли сегодня и т.п.
    Сервисы - реализовать как классы (синглетоны или нет), отдельные процедуры или как угодно.

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 02:55 07-11-2012
    krapotkin

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Самое главное, что задача автора решается ЛУЧШЕ всего просто добавлением метода в форму.
    Не универсального, не создающего наследований и т.д.
    Просто по событию Firebird Event или таймеру вызывается что-то типа  
    procedure UpdateEditColors;
    begin
        if () then
        begin
           edit1.color := clRed;
           dtPicker1.color := clRed;
        end
        else
        begin
           edit1.color := clWindew;
           dtPicker1.color := clWindow;
        end;
    end;
     
    DevEx само по себе монстроидальное порождение, лазить туда и переопределять что-то, это беда. У автора же не фреймворк пишется.
    Затраты времени здесь, как на разработку, так и на поддержание ОПТИМАЛЬНЫЕ.
    Даже если три пикалки-бибикалки позже добавлять.
    И не нужно плодить сущности без необходимости.
     
     
    P.S. С т.з. что использовать - таймер или events:
    если события происходят часто - таймер. если редко - events

    Всего записей: 69 | Зарегистр. 10-01-2006 | Отправлено: 06:58 07-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    krapotkin

    Цитата:
    DevEx само по себе монстроидальное порождение, лазить туда и переопределять что-то, это беда.

    лазюю, переопределяю, все ок. ЧЯДНТ? даже справку для этого читать не обязательно, есть нормально написанные сорцы, и не нужно уж так его бояться, особенно когда нужно всего-то немного переопределить поведение/добавить небольшой функционал..

    Цитата:
     
    Затраты времени здесь, как на разработку, так и на поддержание ОПТИМАЛЬНЫЕ.  
     

    на каждый эдит на ончендж еще надо выставить такой код по условиям задачи.. куда уж там оптимальней.
    а так, один маленький метод, без перечисления всей кучи контролов (их же не два, по условиям). ВСЁ.  
    Вся разработка в такой постановке занимает минуты 3 (включая поиск метода).  
    Поддержание - тоже проще, например, когда добавляются новые эдиты (самый вероятный сценарий развития событий), писать вообще не нужно ничего.  
     
     
    Добавлено:
    XPerformer

    Цитата:
    На делфи это можно организовать как некий цикл (типа оконной процедуры), который себе крутится и проверяет, а не свистнул ли рак, а не нажал ли юзер кнопку, а не 13-00, четверг ли сегодня и т.п.  
    Сервисы - реализовать как классы (синглетоны или нет), отдельные процедуры или как угодно
     

    Это имеет смысл в некоторых ситуациях (например переопределение WndProc), но реализовывать подобное надо очень аккуратно и вдумчиво. и это никак не 'универсальный OnChange'

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 08:30 07-11-2012
    exteris

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    лазюю, переопределяю, все ок

    Знаю нескольких людей. Доопределялись, до сих пор с 3-4-й версии девок уйти не могут, потому что много чего дописано/доделано.

    Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 10:10 07-11-2012 | Исправлено: exteris, 10:10 07-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exteris
    значит либо неграмотно дописывали (обычно простые изменения просто переносятся), либо им нужен был такой большой свой функционал, что-все одно - переделывать контролы, никуда от этого не уйти..  
     
    Добавлено:
    Плохо менять код самих компонентов - мерджить изменения надоест, но когда все на наследниках - апдейт до версий происходит достаточно плавно

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 10:38 07-11-2012
    krapotkin

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    A_V

    Цитата:
    на каждый эдит на ончендж еще надо выставить такой код по условиям задачи.. куда уж там оптимальней.

    По условиям задачи как раз извне приходит сообщение и надо вызвать некий метод, который произведет изменения свойств компонентов.
    Не делать же наследника TEdit, который сам в базу лазит?
     
    А по поводу гигантизма DevEx достаточно ознакомиться с процедурой установки, не заглядывая в исходники  ))

    Всего записей: 69 | Зарегистр. 10-01-2006 | Отправлено: 11:38 07-11-2012
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    krapotkin
    правильно, это внешний момент, он и должен вызываться внешне.
    изменение цвета по реакции на ввод данных пользователем в контрол - внутреннее дело контрола. (т.е если это не одиночное поведение, а стандартное для приложения/формы надо и решать его на уровне приложения/формы).
    вобщем не надо смешивать эти две задачи - по синхронизации данных между пользователями, и по обработки данных контролами.
    мой вариант решения занимает где-то 10 строк кода, с объявлением типа, декларацией метода, begin/end. для всех контролов на форме. если нужны не все, добавляется одно св-во. все. что может быть проще?  
     
    насчет гигантизма devex - да, пожалуй, это самая большая сторонняя библиотека для delphi, но это не значит, что нужно бояться написать к какому-то контролу своего наследника. vcl вот тоже не маленький..

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 11:46 07-11-2012 | Исправлено: A_V, 11:56 07-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    krapotkin
    Ваше предложение  

    Цитата:
    procedure UpdateEditColors;  

    это из той же оперы, что и у XPerformer
    Только хуже...  
    A_V предложил вариант, который:  
    а) легко поддерживаемый
    b) легко расширяемый
    с) легко тестируемый
     
    Ваши варианты имеют право на жизнь, но для программки на 100 строк и 5 формочек... При увеличении же сложности Вы запаритесь поддерживать свой код.
     
     
    Ну а по поводу того, что DevEx большие и сложные и лезть туда - ни-ни (привет XPerformer с его предохранителями), то в .net влазят в сборки от Microsoft, меняют и заставляют работать то, что не работало (или работало не верно\не оптимально). А код в Dev достаточно "красивый и лазить по нему - одно удовольствие.

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 12:15 07-11-2012 | Исправлено: salexn1, 12:19 07-11-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые Мастера, поставили мне задачу нарисовать прожку наподобии TeamViewer'а.
    Облазил весь инет в поисках каких-либо похожих исходников - результат плачевный.
    Ума не приложу, с чего начинать.
    Не подскажет ли кто, с чего начинать-то?
    Спасибо.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 09:17 08-11-2012
    YuriyRR



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    http://sourceforge.net/projects/ultravnc/develop
    посмотри на это для начала. такую программу написать ооочень сложно.

    Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 10:50 08-11-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuriyRR
    Мда... Полная ж... Спасибо за наводку, буду пробовать.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 15:03 08-11-2012
    krapotkin

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    salexn1
    без выпячивания, просто в порядке объяснения:
    учитывая, что сейчас одна из моих программ в реалтайме обрабатывает по 2 гб данных в день, другие тоже работают с нехилой нагрузкой, используя и TCP, и базы данных, и datasnap и андроид, и еще много чего; да и занимаюсь я этим делом скоро как 20 лет, посчитал себя вполне способным высказать мнение "из опыта". Можно не принимать его, но пункты абц в соединении с постановкой задачи абсолютно точно выполняются.
    В т.ч. для меня как руководителя бизнеса, важно, что не надо будет для поддержки находить/отвлекать высококлассного специалиста, которые все ох как заняты обычно, а достаточно крепкого середнячка.
     
    Каждому случаю лучше подбирать свой инструмент, иногда и без расчета на "а вдруг через 10 лет"...
    Ну да решать вам.

    Всего записей: 69 | Зарегистр. 10-01-2006 | Отправлено: 20:43 08-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    krapotkin
    Конечно, выбирать будет каждый сам.
    Но Вам, как руководителю, даже скорее как владельцу продукта, должно быть тем более важен, такой фактор, как легкость поддержки.
     
    Тот код, который Вы привели, имеет право на жизнь, но только в том случае, если это код на одной форме, для программы, которая не будет развиваться.  
     
    Для той модели, которую предложил A_V, не нужен супер программер. Кода там - 3 строчки. А вот Ваш, если будет не 2, а 10 edit и разные условия разрастется до ужасных размеров, и стоимость с каждым добавленным Edit будет расти просто экспоненциально.  

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 22:06 08-11-2012 | Исправлено: salexn1, 22:29 08-11-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу прощения за, возможно, простой вопрос:
    Как в EhLib'е в заголовке сделать две строки? Забыл напрочь

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 08:20 09-11-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    Нужно Caption через "|" разделять:
     
    "Отчет | С", "Отчет | По"

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 09:15 09-11-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    salexn1
    Спасибо огромное, получилось

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 09:27 09-11-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru