Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1127120812
Андрей гость
2005-09-19 13:06
2005.10.16
сложный запрос с заменой символов


14-1127730098
boriskb
2005-09-26 14:21
2005.10.16
Кто здесь спорит об антивирусах?


3-1125475563
DmitryNekl
2005-08-31 12:06
2005.10.16
Неверная фильтрация, ADO, доступ к текстовым файлам через Jet


3-1125509304
Турист
2005-08-31 21:28
2005.10.16
ADO - возможность использования clUseServer в CursorLocation


2-1127149949
pr0t0n
2005-09-19 21:12
2005.10.16
Napisano vse pravilno, no ne rabotaet???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский