2013-08-04 2 views
0

С моей первой попытки создать слишком большую программу, чтобы вписаться в один исходный файл, я продолжаю сталкиваться с проблемами, разделяя их на несколько. Например, что мне делать, если один модуль будет использоваться несколькими другими модулями, которые в конечном итоге будут включены друг в друга. Скажем, linear_algebra.cpp (или .py или что-то еще) требует tensor_operations.cpp, и оба они требуют matrix_operations.cpp. Должен ли я включать matrix_operations.cpp в оба других файла, или просто в один или что? И что, если тогда я добавлю matrix_operations в какой-то другой модуль, что в какой-то момент вдруг появляется необходимость в линейной_алгебре? Весь этот бизнес постоянно меня смущает. Иногда я это понимаю, но должен быть «правильный» способ, чтобы вам не приходилось самостоятельно выяснять.Как структурировать модули?

Итак, где я могу получить руководство о том, как правильно делать этот материал (или, по крайней мере, как они его называют, потому что Google не понимает меня, когда я говорю «такие вещи»)?

ответ

2

Похоже, вы пытаетесь избежать циклических зависимостей, который является ключевым термином, который вы хотите найти.

Например, если у вас есть модули A и B, и вы обнаружите, что A необходимо ссылаться на B и B, необходимо обратиться к A, тогда у вас есть циклическая зависимость между A и B. (Другими словами, если вы обратил отношения между модулями как график со стрелками, показывающими зависимости, там была бы пара стрелок между A и B.)

Решение состоит в том, чтобы идентифицировать бит кода в A, который необходим B, реорганизовать этот бит выйдите в новый модуль C, а затем обратитесь к C из A и B. (Это означает, что B больше не нужно ссылаться на A.)

Итак, вы идете от

A <----> B 

в

A -----> B 
|  | 
\/  | 
/ | 
C ------ 
    \ 

Делая это, вы идете из нескольких крупных модулей многих небольших модулей с более свободной связью между ними. Это, в свою очередь, должно сделать ваш код более удобным для обслуживания и повторного использования.

+0

Речь идет не только о циклических зависимостях (хотя спасибо за разъяснение, по крайней мере, того). Вопрос более общий: как организовать и структурировать программные модули в общем случае? Есть ли полное руководство? – user2649762

+0

Ознакомьтесь с такими книгами, как * Code Complete * или * Pragmatic Programmer *. Это даст вам некоторые принципы, которые следует соблюдать, например, ослабление сцепления и высокая степень сцепления. Но нет решения «краска по числам» - каждая программа отличается. –

Смежные вопросы