Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Перекрестные ссылки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.055 c
14-1127567220
NewWonder
2005-09-24 17:07
2005.10.16
Помогите с переводом фразы


14-1127740084
oldman
2005-09-26 17:08
2005.10.16
Еще задачка :)))


2-1127192246
извращенец2
2005-09-20 08:57
2005.10.16
Как узнать имя компьютера


4-1121359374
s999
2005-07-14 20:42
2005.10.16
Консольное приложение


1-1127556641
Sergey_R
2005-09-24 14:10
2005.10.16
Генерация TreeView в runtime