Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизПерекрестные ссылки Найти похожие ветки
← →
Andrushk (2005-09-14 13:13) [0]У нас на работе считается плохим стилем использовать перекрестные ссылки между модулями. Никто толком не знает что в них плохого, но глюки часто списывают на них:-)
Хотелось бы услышать мнение человека, который четко представляет проблему, есть какие-то негативные последствия использования перекрестных ссылок в модулях?
Заранее спасибо.
← →
Ega23 © (2005-09-14 13:17) [1]Запутаться можно здорово.
Никогда не доводилось чужие сишные хедеры разбирать?
← →
Andrushk (2005-09-14 13:40) [2]Ну вот ситуация.
Есть основная форма с датасетом. С нее вызывается форма редактирования, которая должна использовать этот датасет. Логично было бы сделать перекрестную ссылку и нет проблем. Так вот мы сейчас в дочерней форме, чтобы не создавать перекрестную ссылку, в секцию public добавляем поле типа датасет и при создании формы пишем в него ссылку нв датасет родительской формы.
Вот такой простой пример...а если надо передать не только датасет, а кучу параметров...
Что будет плохого, если сделать перекрестную ссылку?
Под плохим я понимаю: будет расти размер программы, снижаться скорость работы, всякие глюки лезть....т.е. то что программа стала сложнее...ну это нормально, что делать...
← →
Ega23 © (2005-09-14 13:45) [3]Для DataSet"а есть DataModule. Вот там он и должен лежать. Прописываешь в uses обоих юнитов - и не имеешь проблем.
← →
Плохиш © (2005-09-14 13:49) [4]
> Andrushk (14.09.05 13:40) [2]
> Ну вот ситуация.
> Есть основная форма с датасетом. С нее вызывается форма
> редактирования, которая должна использовать этот датасет.
> Логично было бы сделать перекрестную ссылку и нет проблем.
>
Завтра понабилось, чтобы "основная" форма была в нескольких экземплярах --> весь проект переделывать?
← →
Andrushk (2005-09-14 14:18) [5]2 Ega23 [3]
1. Я привел пример, это может быть и не датасет
2. Достаточно сложно и не нужно объяснять почему всетаки в моем случае датасет должен лежать на форме
3. Меня интересует что плохого в перекрестной ссылки а не как от нее избавиться.
Плохиш © [4]
Она и так в нескольких экземплярах и что?
Может кто-нибудь сказать по существу?
← →
Reindeer Moss Eater © (2005-09-14 14:21) [6]На работу программы перекрестные ссылки не оказывают ни малейшего влияния.
Просто потому, что никаких перекрестных ссылок в работающих программах нет.
Это вопрос стиля проектирования и не более того.
← →
Digitman © (2005-09-14 14:23) [7]
> Andrushk (14.09.05 14:18) [5]
при чем здесь вообще какие-то там "формы" ?
речь идет о МЕЖМОДУЛЬНЫХ ссылках !
а уж что там в этих модулях декларировано - формы или не формы - значения НЕ имеет НИкакого.
> интересует что плохого в перекрестной ссылки
ничего плохого в перекрестных ссылках нет.
← →
Andrushk (2005-09-14 14:30) [8]2Digitman © (14.09.05 14:23) [7]
Формы при том, что стандартно одна форма - один юнит.
Как пример: формы должны использовать поля друг друга.
Как вариант взаимодействия - перекресные ссылки.
Я могу конечно свой конкретный пример привести, но решил придумать этот, так как он проще.
← →
Andrushk (2005-09-14 14:34) [9]Reindeer Moss Eater © (14.09.05 14:21) [6]
Ок, а где можно почитать про то, как делфи обрабатывает такие ссылки.
Т.е. если Вы пишите "Просто потому, что никаких перекрестных ссылок в работающих программах нет." значит код как-то преобразуется?
Т.е. я могу предположить что использование перекрестных ссылок изменяет размер программы. Так?
← →
Reindeer Moss Eater © (2005-09-14 14:35) [10]Т.е. я могу предположить что использование перекрестных ссылок изменяет размер программы. Так?
Никак не меняет.
Нет никаких ссылок внутри готовой программы.
← →
Andrushk (2005-09-14 14:45) [11]Reindeer Moss Eater © (14.09.05 14:35) [10]
Т.е. вся проблема только в читабельности программы?
И всетаки, есть какая-нибудь литература по данной тематике, которую Вы могли бы рекомендовать?
← →
Reindeer Moss Eater © (2005-09-14 14:51) [12]Это дело вкуса.
Либо вопрос корпоративного стандарта проектирования.
А мои рекомендации такие - как можно меньше зависимостей между модулями и формами.
← →
Игорь Шевченко © (2005-09-14 14:53) [13]Насколько я понял, перекрестные - это когда два модуля ссылаются друг на дурга ? Таки да, плохо.
← →
Andrushk (2005-09-14 15:58) [14]Reindeer Moss Eater © (14.09.05 14:51) [12]
Ваше мнение понятно, спасибо :-)
Игорь Шевченко © (14.09.05 14:53) [13]
Именно так.
Почему плохо на Ваш взгляд?
← →
Джо © (2005-09-14 15:59) [15]Усиливают зависимость.
← →
Игорь Шевченко © (2005-09-14 16:04) [16]Andrushk (14.09.05 15:58) [14]
> Почему плохо на Ваш взгляд?
Потому что общие вещи лучше объединить и вынести в третий модуль, на который ссылаться из первых двух.
← →
Andrushk (2005-09-14 16:58) [17]Я когда вопрос задавал, писал что глюки часто сваливают на перекрестные ссылки.
Так вот пример. В одном из приложений есть у нас датамодуль, сколько там наборов данных не считал, но вобщем в разрешении 1280x1024 форма занимает весь экран и там датасет на датасете лежит, местами в два слоя:-)
Естественно что все формы его юзают. Но на определенном этапе жизни приложения появились и ссылки из датамодуля на формы...
И никто не знает когда и как это случилось, но датамодуль перестал отлаживаться. Т.е. точки в нем не срабатывают, а если ставить точку раньше, то отладчик просто не заходит в код датамодуля. Причем это не локальный глюк, а у всех разаработчиков.
Свалили на перекрестные ссылки. Никто с этим не сталкивался?
← →
Reindeer Moss Eater © (2005-09-14 17:02) [18]Код модуля данных ссылается на модули форм?
Ну тогда понятно почему все свалили на перекрестные ссылки.
← →
Andrushk (2005-09-14 17:19) [19]Reindeer Moss Eater © (14.09.05 17:02) [18]
Ну да, ссылается, сходу не скажу по какой конкретно причине, не я писал, но факт есть факт, какие-то данные с формы понадобились в обработчике в датамодуле...
А что именно понятно?
← →
Andrushk (2005-09-14 17:20) [20]Кстати, в свое время хотели разгрузить датамодуль, сделать два а может и три, а то просто неудобно стало. Но от идеи отказались, как раз из-за перекрестных ссылок.
← →
Reindeer Moss Eater © (2005-09-14 17:20) [21]Понятно, что с проектированием у вас туго.
← →
Джо © (2005-09-14 17:23) [22]
> [20] Andrushk (14.09.05 17:20)
> Кстати, в свое время хотели разгрузить датамодуль, сделать
> два а может и три, а то просто неудобно стало. Но от идеи
> отказались, как раз из-за перекрестных ссылок.
Вот потому-то я и сказал, что увеличивает взаимную зависимость.
← →
Andrushk (2005-09-14 17:25) [23]2 Reindeer Moss Eater © (14.09.05 17:20) [21]
Может и туго, но я вот пытаюсь учиться, а Вы вместо помощи отписываетесь чем-то больше похожим на едкие насмешки:-)
← →
Andrushk (2005-09-14 17:35) [24]2Джо © (14.09.05 17:23) [22]
Ну это понятно...
Но вот зависимости нет, все здорово...
Но датамодуль нечитаемый:-)
Что лучше?
← →
Reindeer Moss Eater © (2005-09-14 17:39) [25]>Но вот зависимости нет, все здорово...
Где же здорово, ели твой датамодуль знает какие контролы находятся в других формах и как их зовут.
Это и называется зависимостью модулей.
← →
Джо © (2005-09-14 17:39) [26]
> [24] Andrushk (14.09.05 17:35)
> Что лучше?
Лучше когда по уму :) А если для развития широты взгляда на вопрос, то очень рекоммендую к прочтению С. Макконнелл. Совершенный код.
← →
Vudu (2005-09-14 17:43) [27]Перекрстные ссылки использовать незапрещено и на работу программы они невлияют, просто сейчас считается признаком дурного тона их использовать, из-за трудночитаемости (и более сложной отладки) исходного кода. Я в своих программах (кроме древних бейсиков) их неиспользую
← →
Andrushk (2005-09-14 17:57) [28]2 Reindeer Moss Eater © (14.09.05 17:39) [25]
Ладно объясню, если бы потом какой-то пес не наплодил ссылок на другие модули, то было бы "...все здорово".
Так лучше? Мне казалось что я довольно ясно высказал мысль.
Так что вы можете сказать по поводу почему датамодуль не отлаживается? Ничего? Может тогда оставить сарказм?
← →
Игорь Шевченко © (2005-09-14 17:57) [29]
> Так вот пример. В одном из приложений есть у нас датамодуль,
> сколько там наборов данных не считал, но вобщем в разрешении
> 1280x1024 форма занимает весь экран и там датасет на датасете
> лежит, местами в два слоя:-)
А разбить на несколько кто-то не позволяет ?
← →
Andrushk (2005-09-14 17:58) [30]2 Джо © (14.09.05 17:39) [26]
Ага, пасиб, видел в магазине...видимо неспроста взягляд на нее упал:-)
← →
Игорь Шевченко © (2005-09-14 17:59) [31]Andrushk (14.09.05 17:25) [23]
> но я вот пытаюсь учиться, а Вы вместо помощи отписываетесь
> чем-то больше похожим на едкие насмешки
Я сильно извиняюсь, а что, самообразование или платные консультации уже отменили ?
← →
Reindeer Moss Eater © (2005-09-14 17:59) [32]Andrushk
Что заело пластинку?
Ты заявил, что у тебя нет никакой зависимости модулей.
Я тебе показал, что у тебя есть жуткая зависимость между модулями.
Как сделать лучше я тебе уже написал сто постов назад.
← →
Reindeer Moss Eater © (2005-09-14 18:01) [33]А то, что прилада не отлаживается с перекрестными ссылками никак не связано.
С таким подходом к проектированию это неудивительно, что не отлаживается.
← →
Andrushk (2005-09-14 18:03) [34]2 Игорь Шевченко © (14.09.05 17:57) [29]
Я писалал на эту тему.
Дело в том, что датасеты связаны друг с другом (например на afterscroll у одного могут передаваться параметры в другой)...т.е. пришлось бы делать перекрестные ссылки. Поэтому затею оставили.
А когда пошел глюк с отладкой, стали смотреть код, оказалось что перекрестные ссылки всеравно есть, на формы... И глюк списали именно на перекрестные ссылки.
← →
Юрий Зотов © (2005-09-14 18:05) [35]Прекрестные межмодульные ссылки - сродни goto и не более. Ничего ни плохого, ни хорошего ни в том, ни в другом само по себе не содержитcя, а весь вопрос лишь в том, злоупотреблять ими, или нет. При разумном использовании - why not? Главное - чтобы структура проекта оставалась прозрачной и допускала его безболезненную модификацию, а сами модули были читабельны (это к вопросу о датасетах в два слоя - неужели сразу нельзя было сгруппировать их по их логическому назначению и разместить на разных датамодулях?).
← →
Игорь Шевченко © (2005-09-14 18:06) [36]Andrushk (14.09.05 18:03) [34]
> Дело в том, что датасеты связаны друг с другом (например
> на afterscroll у одного могут передаваться параметры в другой).
> ..т.е. пришлось бы делать перекрестные ссылки. Поэтому затею
> оставили.
Что, вообще все датасеты (которые не умещаются в 1280х1024) имеют ссылки друг на друга ?
← →
Суслик © (2005-09-14 18:12) [37]Я иногда сам использую такие ссылки. Но сейчас, особенно после внедрения runtime-пакетов, стараюсь писать так, чтобы таких ссылок вообще не было даже косвенных (А ссылается на Б, Б - на В, В на А).
Если придерживаться этого правила, то вынесение кода в runtime пакеты не представляет трудностей. Иначе беда - нужно все переделывать, т.к. runtime пакеты не могут иметь зацикленных ссылок вообще, даже под implementation.
← →
Andrushk (2005-09-14 18:25) [38]Юрий Зотов © (14.09.05 18:05) [35]
Понятно.
А по поводу датамодуля: можно сгруппировать было, например: справочники и документы...но я объяснял почему не сделали.
← →
Andrushk (2005-09-14 18:32) [39]2 Игорь Шевченко © (14.09.05 18:06) [36]
Конечно нет, но при таком количестве датасетов достаточно трудно их разделить на независимые группы, кроме того нет гарантии, что при следующей "дописке" программы независимые датасеты не станут зависимыми:-)
Собсвенно говоря, когда программа была написана,она выглядела вполне прилично и логично (с точки зрения кода). А потом начались дописки и приписки, и начался бардак:-)
Но опятьтаки, это просто пример...мы сейчас поменяли принцип построения программ...просто интересно узнать почему так...
Ну и вообще на будующее, если снова придется воротить такие проекты, как лучше поступить...
← →
Andrushk (2005-09-14 18:38) [40]2 Суслик © (14.09.05 18:12) [37]
Мы кстати тоже их стали использовать.
И дата-модули разделили на: Документы, Справочники и Процедуры - три пакета.
Возможно благодаря этому ни у кого больше не возникает желания юзать из дата-модуля другие формы:-)
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.043 c