Разделение проекта VB / C # и ссылок - PullRequest
1 голос
/ 21 декабря 2010

Я унаследовал проект, написанный в основном на VB.Я хотел бы сохранить то, что у меня есть в VB, и при этом медленно конвертировать в C #, когда смогу.Единственный способ сделать это - создать отдельный проект на C #.Однако это вызывает проблемы из-за зависимостей и ссылок.Я не могу иметь VBProject ссылку CSharpProject и наоборот, потому что она создает циклическую ссылку.Это проблема, потому что мне нужно, чтобы оба проекта могли ссылаться на другие.Есть ли лучший способ сделать это, или я застрял писать в VB (или полностью перевод на C #)?

Кроме того, эти проекты находятся в одном решении.Разве я не смогу импортировать / использовать их без создания ссылки или каким-либо другим более простым способом?

Ответы [ 4 ]

3 голосов
/ 21 декабря 2010

Нет необходимости обходить круговые ссылки.

Когда я сталкивался с подобной ситуацией в прошлом, переходя с языка A на язык B, я начал с рефакторинга битов кода языка Aчтобы они не зависели от большей части кода.Затем я перевел бы эти изолированные части на язык B и интегрировал их так, чтобы основная программа теперь зависела от новых модулей.В конце концов все, что осталось, - это основная программа.

Потребовалось время, но этот подход снизу вверх оказался очень эффективным, и в итоге я получил гораздо более модульную программу.

2 голосов
/ 21 декабря 2010

Inversion of Control очень поможет вам в выполнении такой миграции.Недавно я решил аналогичную проблему, когда меня попросили добавить значительную функциональность в непроверенный код VB.Net для клейкой ленты.Я хотел извлечь существующую уязвимую функциональность из VB.Net и поместить ее в сборку C #, протестированную модулем.

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

Например, для заданных классов Alpha, Bravo и Charlie в сборке VB.Net, гдеАльфа имеет ссылку на Браво.Вы хотите извлечь Браво, но в нем есть ссылка на Чарли.Определите интерфейс под названием ICharlie в проекте C #, который содержит членов в Charlie, которые заботятся о Bravo.В проекте VB.Net измените Чарли: ICharlie.Когда вы создаете Bravo, он принимает зависимость типа ICharlie.

Преимуществом такого подхода, даже в рамках одного и того же проекта или набора проектов, является тестируемость.Зависимости между классами хорошо известны и могут быть заменены макетами / заглушками, так что такие классы, как Bravo, можно тестировать, не беспокоясь о настройке его с реальной реализацией ICharlie.

1 голос
/ 21 декабря 2010

Если вы не можете извлечь конкретные элементы в новый проект C # для ссылки, вам придется все это переписать.Если это проект веб-приложения или проект Windows Forms, вы не можете поддерживать какой-либо гибрид в одном проекте.Если у вас есть проект веб-сайта, вы можете указать язык для каждой отдельной страницы, который позволит вам иметь гибрид.Однако это очень грязно, и вам будет гораздо лучше распределить время, чтобы переписать все это в C # или приспособиться к записи в VB.

1 голос
/ 21 декабря 2010

Вы не сможете сделать это, пока проект c # зависит от проекта VB.

Вам нужно извлечь классы из проекта VB.net в проект c #, чтобы классы / функции были автономными и не зависели от проекта VB.

Это то, что я сражаюсьпротив на работе каждый день, и я медленно двигаюсь к свету (c #)

...