2010-06-22 1 views
4

Как я могу начать с дизайна класса перед началом разработки большого приложения (как WinForm, так и WebApp). Каковы первоначальные «осторожные» вещи, которые я должен проверить перед проектированием структур классов?Как начать с дизайна класса для корпоративного приложения?

Как определить использование интерфейсов, абстрактных классов, делегатов, событий и т. Д. В моем проекте приложения?

ответ

9

Тщательный ответ на этот вопрос потребует книги, а не сообщения StackOverflow! На самом деле, об этом уже немало книг, таких как: : Patterns of Enterprise Application Architecture. Вот некоторые общие указатели:

  • Убедитесь, что вы понимаете часть проблемного домена, над которым работаете. Вы говорили с вашими клиентами, чтобы сначала запустить их? Модель вашего домена соответствует тому, как они думают о мире?

  • Статистически говоря, ваше применение вряд ли будет особенным. Это означает, что если кто-то утверждает, что им нужна определенная архитектура или шаблон реализации для работы (например, служебная шина предприятия, очереди сообщений и т. Д.), Вы должны просмотреть ее скептически. Подумайте, не лучший ли другой подход.

  • Изолируйте несвязанные части приложения друг от друга как структурно, так и логически. Не просто расслабляйте и не разделяйте классы; сделать их полностью отдельными проектами, которые должны быть построены отдельно.

  • Код для интерфейса, а не реализации. Если несколько классов все делают что-то подобное, создайте интерфейс. Не используйте абстрактные базовые классы в качестве псевдо-интерфейсов. Зависит от интерфейса и передает его, а не отдельные классы реализации.

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

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

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

  • И наконец, все в меру. Взятие любого из вышеперечисленных (или вообще что-то вообще) до крайности - плохая идея. Единственное, что вам нужно делать в крайнем случае - это сама умеренность! :)

+0

+1 для приятного и краткого ответа на объемную тему! Хорошая справочная книга тоже помогла мне во многих случаях. – rob

+0

Утонченный и понятный. Спасибо, что упомянул книгу. – NLV

+0

+1 для отличных советов, с двумя оговорками: 1) легко переусердствовать с отдельными сборками (см. Превосходные статьи Патрика Смаккии) (http://www.theserverside.net/tt/articles/showarticle.tss?id= ControllingDependencies) и 2) очереди сообщений недоиспользуются и являются удивительными. :) –

1

Я вижу два основных вида проектных работ.

Существует разложение в элементах первичной системы. Итак, у вас уже есть представление об отделении частей представления от остальной части вашей системы. Вероятно, у вас тоже есть бизнес-логика и постоянство. Первый важный вопрос, сколько Business Logic у вас действительно есть. Некоторые системы - это немного больше, чем тонкая кожа перед простой базой данных, вряд ли любая истинная бизнес-логика.У других есть очень важные части бизнес-логики, которые в некоторой степени независимы.

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

Далее сверлить бизнес-части логики. Интерфейсы и абстрактные классы и т. Д. - это методы структурирования реализации сложности. Отделите свой код, чтобы детали были скрыты, а гибкость включена. Я рассматриваю это как упражнение проектирования OO, есть много книг об этом, например head first.

+0

Можете ли вы назвать несколько из этих книг, чтобы сделать упражнение по дизайну? – NLV

+0

Спасибо за ссылку. – NLV

2

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

Когда вы будете готовы к этому, может быть хорошей идеей закодировать «сквозное» приложение для проверки ваши архитектурные решения. Это означает небольшое приложение, которое затрагивает большинство ваших слоев при работе с очень маленьким прецедентом. Он должен быть достаточно маленьким, чтобы его можно было легко переписать/исправить/выбросить, если вы считаете, что части вашей архитектуры испорчены. Это также хорошая техника, чтобы получить первое преимущество в дизайне вашего класса.

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