Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 13.04.10 09:42
Оценка:
Некоторая задача обработки документа выполняется в несколько приемов, соответственно документ в процессе обработки проходит несколько стадий. Каждая стадия обработки выполняется отдельным программным модулем представляющим из себя DLL. Некоторые документы ссылаются на другие документы, обработку которых нужно выполнить при обработке документа содержащего ссылку, что приводит к появлению взаимозависимых DLL, построение которых в Visual Studio неэлементарно. Что такого неправильного в приведенной постановке задачи, что ее приходится решать через одно место? Подобные взаимозависимости не приводят к каким-то особым проблемам, если модули представляет собой LIB, COM или CORBA; так может дело все же не в том, что взаимозависимости плохи сами по себе, а в том, что формат DLL был плохо продуман?
Re: Взаимозависимые модули это плохо?
От: vshabanov http://vshabanov-ru.blogspot.com
Дата: 13.04.10 10:15
Оценка:
Здравствуйте, igna, Вы писали:

I>Некоторая задача обработки документа выполняется в несколько приемов, соответственно документ в процессе обработки проходит несколько стадий. Каждая стадия обработки выполняется отдельным программным модулем представляющим из себя DLL. Некоторые документы ссылаются на другие документы, обработку которых нужно выполнить при обработке документа содержащего ссылку, что приводит к появлению взаимозависимых DLL, построение которых в Visual Studio неэлементарно. Что такого неправильного в приведенной постановке задачи, что ее приходится решать через одно место? Подобные взаимозависимости не приводят к каким-то особым проблемам, если модули представляет собой LIB, COM или CORBA; так может дело все же не в том, что взаимозависимости плохи сами по себе, а в том, что формат DLL был плохо продуман?


Когда я после С++ перешел на OCaml, я в какой-то момент столкнулся с тем, что там не может быть рекурсивных модулей (по крайней мере в разных файлах). Некоторое время я поплевался: чё за фигня? А потом попилил задачу так, чтобы взаимозависимости были не нужны (обычно лечится дополнительным модулем, на который ссылаются остальные). В итоге код стал проще и понятнее.

IMHO, взаимозависимости скорее плохо, чем нет, т.к. более сложны в понимании (и, следовательно, в поддержке).

В данном конкретном случае, скорее всего также можно вынести некий отдельный модуль-загрузчик обработчиков документов, и всем модулям общаться не напрямую, а через него. По сути, тот же COM с реестром.
Re[2]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 13.04.10 10:38
Оценка:
Здравствуйте, vshabanov, Вы писали:

V>IMHO, взаимозависимости скорее плохо, чем нет, т.к. более сложны в понимании (и, следовательно, в поддержке).


Верно, и нужно по возможности пытаться обходиться без них. Но бывают случаи.

V>В данном конкретном случае, скорее всего также можно вынести некий отдельный модуль-загрузчик обработчиков документов, и всем модулям общаться не напрямую, а через него. По сути, тот же COM с реестром.


Вот именно, бывают конкретные случаи, где взаимозависимости не то чтобы плохи или наоборот хороши, а они есть и никуда их не деть. Но вместо того, чтобы просто вздохнуть и сказать, что мол, чтож, будем использовать взаимозависимости раз так, и продолжить заниматься задачей, приходится сначала потратить некоторое количество времени на поиск обходного пути.
Re: Взаимозависимые модули это плохо?
От: GlebZ Россия  
Дата: 13.04.10 10:57
Оценка: +1
Здравствуйте, igna, Вы писали:

Я чего-то не понял. Если две единицы деплоинга жить друг без друга не могут, то почему они разъеденены?
Re[2]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 13.04.10 11:06
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Я чего-то не понял. Если две единицы деплоинга жить друг без друга не могут, то почему они разъеденены?


А если одна единица деплоинга не может жить без другой, вопроса, почему они разъединены, не возникает?
Re[3]: Взаимозависимые модули это плохо?
От: GlebZ Россия  
Дата: 13.04.10 11:25
Оценка:
Здравствуйте, igna, Вы писали:

I>А если одна единица деплоинга не может жить без другой, вопроса, почему они разъединены, не возникает?

Нет
Re[4]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 13.04.10 12:49
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Нет


Ну тогда допустим у меня возник, какой будет твой ответ? То есть:

Почему может иметь смысл разъединять единица деплоинга, если одна из них не может жить без другой?
Re[5]: Взаимозависимые модули это плохо?
От: K13 http://akvis.com
Дата: 13.04.10 12:56
Оценка:
I>Почему может иметь смысл разъединять единица деплоинга, если одна из них не может жить без другой?

Если A жить не может без B, но B не нужен A -- то их разделение имеет глубокий смысл: в некоторых случаях ограниченной функциональности мы можем обойтись без A вообще.
Re[6]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 13.04.10 13:18
Оценка:
Здравствуйте, K13, Вы писали:

K13>Если A жить не может без B, но B не нужен A -- то их разделение имеет глубокий смысл: в некоторых случаях ограниченной функциональности мы можем обойтись без A вообще.


Согласен, но это не единственная причина, по которой программу разделяют на DLL модули. Например, отдельные части программы могут быть написаны на разных языках и откомпилированы разными компиляторами. Совместимость DLL выше чем совместимость LIB.
Re[5]: Взаимозависимые модули это плохо?
От: GlebZ Россия  
Дата: 13.04.10 13:22
Оценка:
Здравствуйте, igna, Вы писали:

I>Почему может иметь смысл разъединять единица деплоинга, если одна из них не может жить без другой?

Есть две причины разъединять на две компоненты.
1. Мы можем поставлять одну dll, и вообще не поставлять другую. Обратное может быть и неверно.
2. Компоненты разрабатывают разные группы. Либо они представляют набор сильносвязанных классов/функций, которые лучше отделить интерфейсом. Но в этом случае взаимозависимость — зло. Поскольку ломает слабосвязанность компонент.
В примере который ты привел, ни одной из этих причин не было замечено.
Re[6]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 13.04.10 13:32
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>В примере который ты привел, ни одной из этих причин не было замечено.


Не было замечено — не значит, что их там не было. Я писал например: "Каждая стадия обработки выполняется отдельным программным модулем представляющим из себя DLL." Предположим, что одна из стадий это перевод с английского на русский. По моему, достаточно нетривиальная задача, которую вполне могла бы разрабатывать отдельная группа.
Re: Взаимозависимые модули это плохо?
От: fin_81  
Дата: 13.04.10 14:40
Оценка:
Обращение контроля не помогает в подобных ситуациях?
Re[2]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 13.04.10 15:07
Оценка:
Здравствуйте, fin_81, Вы писали:

_>Обращение контроля не помогает в подобных ситуациях?


Дело не в том, кто кого помогает, а в том, что взаимозависимость модулей это не обязательно плохо.
Re[3]: Взаимозависимые модули это плохо?
От: Sni4ok  
Дата: 13.04.10 15:12
Оценка:
Здравствуйте, igna, Вы писали:

I>Дело не в том, кто кого помогает, а в том, что взаимозависимость модулей это не обязательно плохо.


а с чего вы вдруг подумали, что это обязательно плохо?
несуществует ниодного явления — которое однозначно характеризовалось бы как "плохо", поскольку "плохо" это вещь субьективная.
Re[7]: Взаимозависимые модули это плохо?
От: GlebZ Россия  
Дата: 13.04.10 16:41
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Не было замечено — не значит, что их там не было. Я писал например: "Каждая стадия обработки выполняется отдельным программным модулем представляющим из себя DLL." Предположим, что одна из стадий это перевод с английского на русский. По моему, достаточно нетривиальная задача, которую вполне могла бы разрабатывать отдельная группа.

И сразу же возникают вопросы. Какая группа отвечает за интерфейсы взаимодействия? Кого будут линчевать если изменится последовательность вызовов? Что будет если нужен будет французский язык? Его тоже придется референсить к английскому так как часть интерфейса там?
Re[3]: Взаимозависимые модули это плохо?
От: fin_81  
Дата: 13.04.10 16:43
Оценка:
I>... взаимозависимость модулей это не обязательно плохо.

Для меня взаимозависимость довольно больших и сложных объектов всегда плохо, а при командной разработке постоянные проблемы с мерджами, версиями и тп. Проще выделить отдельный объект-интерфейс (модуль и тп) использую IoC. Упрощаются сами модули, структурируются типы данных для взаимосвязи с модулями.
Re[8]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 14.04.10 05:53
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>И сразу же возникают вопросы. Какая группа отвечает за интерфейсы взаимодействия? Кого будут линчевать если изменится последовательность вызовов?


Эти вопросы возникают независимо от того, имеются ли взаимозависимости или нет, не так ли? Если так, то в контексте они являются демагогическими.

GZ>Что будет если нужен будет французский язык? Его тоже придется референсить к английскому так как часть интерфейса там?


"Как часть интерфейса там".
Re: Взаимозависимые модули это плохо?
От: Pavel Dvorkin Россия  
Дата: 14.04.10 10:51
Оценка:
Здравствуйте, igna, Вы писали:

I>Некоторая задача обработки документа выполняется в несколько приемов, соответственно документ в процессе обработки проходит несколько стадий. Каждая стадия обработки выполняется отдельным программным модулем представляющим из себя DLL. Некоторые документы ссылаются на другие документы, обработку которых нужно выполнить при обработке документа содержащего ссылку, что приводит к появлению взаимозависимых DLL, построение которых в Visual Studio неэлементарно. Что такого неправильного в приведенной постановке задачи, что ее приходится решать через одно место? Подобные взаимозависимости не приводят к каким-то особым проблемам, если модули представляет собой LIB, COM или CORBA; так может дело все же не в том, что взаимозависимости плохи сами по себе, а в том, что формат DLL был плохо продуман?


Ни формат DLL, ни сами DLL тут ни при чем. Суть твоей проблемы в косвенной рекурсии,которая существует независимо от того, существуют ли вообще DLL. А DLL — просто контейнер функций, ну и данных еще тоже, видимых за ее пределами. И таки да, косвенная рекурсия там не очень легко получается с точки зрения разработчика, но все это мелочи.
With best regards
Pavel Dvorkin
Re[2]: Взаимозависимые модули это плохо?
От: igna Россия  
Дата: 14.04.10 12:26
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Ни формат DLL, ни сами DLL тут ни при чем. Суть твоей проблемы в косвенной рекурсии,которая существует независимо от того, существуют ли вообще DLL.


Ну вообще-то будь у меня LIB вместо DLL моей проблемы не было бы.
Re[3]: Взаимозависимые модули это плохо?
От: Pavel Dvorkin Россия  
Дата: 14.04.10 12:40
Оценка:
Здравствуйте, igna, Вы писали:

I>Ну вообще-то будь у меня LIB вместо DLL моей проблемы не было бы.


А что, с тем решением, что я предложил, какие-то проблемы ?
With best regards
Pavel Dvorkin
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.