Как провести рефакторинг крупных проектов в визуальной студии - PullRequest
6 голосов
/ 20 апреля 2010

Я всегда сталкиваюсь с проблемой, когда мои проекты в Visual Studio (2008) становятся огромными чудовищами, и все, как правило, бросается в проект веб-приложения. Из некоторых материалов с открытым исходным кодом я знаю, что у них есть несколько проектов в рамках решения, каждый из которых имеет свои обязанности.

Есть ли у кого-нибудь совет, как это изменить? Что должно быть в отдельном проекте против части веб-проекта? Можете ли вы указать мне какие-либо справочные материалы по этому вопросу, или это просто то, к чему вы привыкли со временем?

Ответы [ 3 ]

5 голосов
/ 20 апреля 2010

Организовать ваш проект аккуратно в пространства имен. Пространства имен не должны быть слишком большими, не слишком маленькими. Сделайте так, чтобы каждое пространство имен имело общедоступный «интерфейс» (то есть набор открытых классов) и не получало доступа к внутренним деталям реализации пространства имен из других пространств имен. Разные пространства имен обычно адресуют разные части приложения, например, у вас будут пространства имен, связанные с пользовательским интерфейсом, бизнес-логикой, вспомогательными функциями и т. д. Руководство по проектированию платформы содержит несколько полезных советов по проектированию пространств имен.

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

2 голосов
/ 20 апреля 2010

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

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

1 голос
/ 20 апреля 2010

Ознакомьтесь с руководством , данным проектом Sharp Architecture . Его ASP.Net MVC, но те же принципы применяются к ASP.NET и другим проектам. Ребята, которые собирают все это вместе, умны Я обычно использую их советы по умолчанию и отклоняюсь, только когда у меня есть веская причина.

Основной уровень, который они предлагают, -

  • core проект для ваших доменных объектов и интерфейсов для доступа к внешним службам (включая постоянство).
  • A data проект, который зависит от ядра и реализует все интерфейсы для доступа к постоянству
  • Проект служб приложений для поддержки задач на уровне приложений, таких как ведение журнала или проверка входа в систему. Это только ссылки на ядро.
  • A web проект, который содержит только представления.
  • A controllers проект, содержащий ваш загрузочный код и код для координации вашего веб-слоя, домена.

В случае приложения asp.net мне нравится использовать шаблон mvp, который в основном будет означать

  • Веб проект содержит ваши веб-формы и кодовые ссылки, которые должны содержать только минимальный объем кода, необходимый для перенаправления на докладчика. Вы, вероятно, также должны будете поместить туда свой код начальной загрузки. Это связано с ограничением ASP.Net, и вы НЕ ДОЛЖНЫ ссылаться ни на что из этого кода из своего кода.
  • Контроллеры * Проект 1039 * заменен проектом презентаторов. Большая разница здесь в том, что WebForm каким-то образом должен создавать экземпляр докладчика, а не наоборот.

Вы также можете попробовать ASP.NET MVP project .

...