Когда вы решите разделить крупные проекты на более мелкие проекты?
Когда/где вы решили разделить большой проект Visual Studio на несколько небольших проектов? Если его можно повторно использовать? когда проект слишком велик? (но насколько большой слишком большой?)
и Когда вы разделите проект, вы,
Ответы
Ответ 1
Плюсы многих проектов:
- Легче изолировать код для модульного тестирования. Мне нравится изолировать код, который имеет зависимость от большой внешней серверной вещи, например код, который говорит с SMTP-сервером, получает свою собственную сборку, код, который говорит с базой данных, получает свою собственную сборку, код, который говорит с веб-сервером, код, который это чистая бизнес-логика, такая как проверки.
Плюсы нескольких проектов:
- Visual studio идет быстрее
- Некоторые разработчики просто не получают ваше видение
о разделении обязанностей
и начнет сдавать классы
везде, так что вы в конечном итоге
боль дополнительных проектов и
выгоды от
один проект.
- Каждый проект имеет конфигурацию, и когда вы принимаете решение о конфигурации проекта, вам часто приходится делать один и тот же chagne повсюду, например, устанавливать или изменять сильный ключ
Преимущества многих решений
- Вы достигнете максимального уровня проекта позже.
- Только материал в вашем текущем решении компилируется каждый раз, когда вы нажимаете f5
- Если проект не будет меняться в жизни вашего приложения, зачем его повторно скомпилировать? Назовите это и переместите его в собственное решение.
Недостатки многих решений
- Вам решать разрабатывать зависимости между решениями и вручную компилировать зависимости в первую очередь. Это приводит к сложным сценариям сборки.
Ответ 2
Проекты должны быть cohesive. Логика должна быть связана, и достижение аналогичной цели
Этот ответ будет зависеть от размера продукта, который вы поддерживаете. В целом мы организуем наши проекты по домену и логике. И мы разделим их еще больше, тем больше вы разделите более организованную, чем вы должны быть, или вы столкнетесь с проблемой ужасной рекурсивной зависимости.
Когда я решаю разбить проект, он становится слишком большим или две области становятся слишком похожими.
Когда сложность возрастает, я не разбиваю на таблицы, я обычно разделяю функциональность.
Повторное использование - еще одно отличное время для сокращения строк кода, а также для внедрения нового проекта. Однако будьте осторожны, сколько библиотек "полезности" вы вводите, потому что они оказывают влияние на читаемость/понятность.
Я не думаю, что в песке есть строка, в которой говорится, что если вы нажмете 3k SLOC, у вас будет слишком много. Все это контекстуально.
Ответ 3
Когда общая цель проекта остается прежней, но количество классов становится большим, я стараюсь создавать папки и пространства имен для лучшей функциональности группы в проекте. Классы, которые связаны друг с другом, как правило, входят в одну папку/пространство имен, так что, если мне нужно понять данный класс, связанные классы находятся поблизости в обозревателе решений. Обычно я только создаю новые проекты, если понимаю, что конкретная функциональность очень различна по назначению или существует общая зависимость между существующими проектами.
Я обычно заканчиваю несколькими относительно небольшими проектами Framework, которые определяют интерфейсы для свободной связи между другими проектами, с более крупными проектами для различных типов конкретных функциональных возможностей. Это всегда, по крайней мере, один проект для пользовательского интерфейса и один проект для логики и данных (часто разделяются на два проекта, если слой данных становится очень большим по своему усмотрению.)
Ответ 4
Я перемещаю код в новый проект, если он имеет общую функциональность (теоретически), которую можно использовать и для других проектов. Если проект большой, поскольку он представляет собой сложную проблему, то пространства имен предоставляют отличный способ навести порядок в коде. Здесь вы можете, например, ввести (под) пространства имен для каждой таблицы SQL и т.д. И т.д.
Ответ 5
У меня всегда есть несколько проектов (и, следовательно, решение), а не один проект со всем моим источником в нем.
В некоторых случаях это неизбежно, потому что вы используете библиотеку с открытым исходным кодом и хотите иметь возможность ее отлаживать. Но более прагматично, я обычно предоставляю свои приложения через плагины. Это позволяет мне изменять поведение или предлагать поведение пользователя во время выполнения. В случае без плагинов он позволяет обновлять одну часть вашей программы, не обновляя все. Есть также случаи, когда вы можете обеспечить основной, по-видимому, и загружать только модули/сборки, когда они вам понадобятся.
Еще одна причина заключается в том, что вы можете создавать более мелкие тестовые приложения для реализации сборки, а не для создания очень большого решения и потенциально требуя от пользователя выполнения нескольких (и нерелевантных) графических интерфейсов перед тем, как дойти до части, которую вы хотите протестировать. И это не просто проблема тестирования - возможно, у вас есть менее опытные пользователи в вашей организации, которые хотят только представить их биты, относящиеся к ним.