2008-08-15 3 views
8

Прошу прощения за такой обобщенный вопрос, но это то, что может оказаться сложным для меня. Моя команда собирается начать большой проект, который, как мы надеемся, объединит все случайные одноразовые кодовые базы, которые эволюционировали на протяжении многих лет. Учитывая, что этот проект будет охватывать стандартизацию логических объектов в компании («Клиент», «Сотрудник»), небольшие задачи, большие задачи, которые управляют небольшими задачами, и коммунальные услуги, я изо всех сил пытаюсь найти лучший способ структурирования пространств имен и структуры кода.Пространство имён/решение

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

  • Я обсуждаю одно массовое решение с подпроектами, чтобы сделать ссылки проще, но это сделает его слишком громоздким?
  • Должен ли я завершать устаревшую функциональность приложения или оставлять это полностью агностиком в пространстве имен (например, класс OurCRMProduct.Customer против общего класса Customer)?
  • Должны ли каждая услуга/проект иметь свои BAL и DAL, или это должна быть совершенно отдельная сборка, на которую все ссылается?

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

ответ

10

Существует миллион способов кожи кошки. Однако самый простой из них всегда лучший. Какой путь для вас самый простой? Зависит от ваших требований. Но есть некоторые общие правила, которые я придерживаюсь.

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

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

Для больших приложений не забудьте оставить логику пользовательского интерфейса и бизнес-логику отдельно.

УПРОЩИТЕ ваше решение. Если это выглядит слишком сложно, возможно, это так. Объедините, уменьшите.

3

Я недавно испытал то же самое на работе. Много специального кода, который необходимо структурировать и организовать.

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

По частям, это единственный способ сделать это.

С точки зрения структуры, я пытался отчасти имитировать пространствами имен MS, так как по большей части его довольно логично (например Company.Data, Company.Web, Company.Web.UI и т.д. .

Одним из основных преимуществ является то, вероятно, количество кода боян удалены. Да немного рефакторинга требуется в приложениях, но базовый код намного компактнее, и во многих отношениях «умнее».

Еще одна вещь, которую я заметил, это то, что у меня часто возникали проблемы с поиском , где положить вещи (в терминах namespacing), так как я не был уверен, к чему это принадлежало. Теперь это действительно беспокоило меня, я рассматривал его как плохой запах. С тех пор, как реорганизация все теперь попадает в космос гораздо красивее. И с (сейчас очень небольшим количеством) прикладного specfic-кода они попадают в Company.Applications.ApplicationName Это помогает мне реально думать о бизнес-объектах намного больше, так как я не хочу слишком много в этом пространстве имен, поэтому я прихожу с более гибкими конструкциями.

Извините за длинный пост .. Это как-то бессвязно!

0

Крупные решения с большим количеством проектов могут быть довольно медленными для компиляции, но их легче управлять.

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

4

Мы называем сборки в .NET следующим образом Company.Project.XXXX.YYYY где ХХХХ проекта и YYYYY является подпроект, например:

  • LCP.AdmCom.Common
  • LCP.AdmCom .BusinessObjects
  • LCP.AdmCom.Common.Dal

Мы это из книги вызова Framework Design Guidelines по Кшиштоф Квалина (Автор), Брэд Абрамс (Автор)

3

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

Вот ссылка, которая объясняет DTO:

http://martinfowler.com/eaaCatalog/dataTransferObject.html

6

Мой совет, вступив на аналогичном предприятии, чтобы не мучиться над пространствами имен ..

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

Не тратьте время на разговоры о своем проекте слишком много. Просто сделай это.

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