Выбор правильной архитектуры .NET. WCF? WPF / Forms, ASP.NET (MVC)? - PullRequest
10 голосов
/ 13 апреля 2010

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

Я не надеюсь, что я написал здесь слишком много, но я хотел дать вам общее представление о том, что такое система.

Краткая информация о приложениях, прочитайте, если хотите: я не могу поделиться подробной информацией о проекте, но в основном это система, в которой мы предлагаем нашим клиентам услугу по управлению их пользователями. У нас есть горячая линия, на которую звонят пользователи, и наша горячая линия использует (windows) приложение (интранет) для управления данными пользователя и т. Д. У клиента также есть веб-приложение, где они могут просматривать отчеты, информацию о своем бизнесе и пользователях, а также Возможность изменять свои данные. Изменение данных - это не только пользовательские данные, такие как адрес и т. Д., Но также информация о продуктах / услугах, которые есть у пользователя, что может быть сложным.

Приложения будут построены на Microsoft .NET Framework 4 с базой данных MS SQL Server 2008. Там будет несколько приложений, которые должны получить доступ к этой базе данных, таких как:

  • Интранет-приложение (используется нами и нашей горячей линией)
  • Тип веб-приложения клиента 1
  • Тип веб-приложения клиента 2
  • Клиентское веб-приложение типа n различных приложений)
  • ...

Теперь моя большая проблема в том, какие части .NET я должен использовать для такой системы. Для «бэкэнда» я рассмотрел возможность использования Windows Communication Foundation: Possible WCF solution Будет ли WCF хорошим выбором?

Приложение интрасети будет приложением, которое должно редактировать множество записей в базе данных. Навигация по клавиатуре должна быть простой (с ней легко работать). Имеет функцию, такую ​​как «найти клиента, найти это, найти это, выбрать это и обновить это». В чем будет лучший выбор для разработки этого приложения? Будет ли это WPF или старые добрые Windows Forms? Мне не нужны все модные графические функции в WPF, такие как 3D, но приложение должно выглядеть красиво (возможно, что-то вроде новых инструментов Visual Studio / Office).

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

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

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


Редактировать 1: Кажется, многие согласны с тем, что мы должны использовать WCF. При внедрении преобразователя ORM на уровне данных и на уровне служб с использованием WCF должно быть снижение производительности? Есть ли у вас какие-либо комментарии по этому поводу?

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

Ответы [ 6 ]

4 голосов
/ 13 апреля 2010

Этот дизайн выглядит в высшей степени выполнимо.

WCF - хороший кандидат на уровень обслуживания, приятно видеть, что наступает какой-то возраст ORM, и у вас есть веская причина иметь пользовательский интерфейс на основе форм и веб-интерфейс.

WPF может (по существу) вести себя как форма Windows. Однако MS рекомендует использовать Win Forms, если вы пишете что-то новое.

ASP.NET MVC является отличным кандидатом для веб-приложений - страницы не сохраняют состояние и у вас гораздо больше контроля над страницей.

Дополнительные подробности можно найти в отдельных обсуждениях типа "WPF VS WinForms".

3 голосов
/ 14 апреля 2010

Технология рабочего стола

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

Некоторые люди занимаются разработкой десктопов, используя Silverlight вместо WPF, полагая, что им следует использовать одну технологию вместо двух. Я не согласен с этим аргументом: две технологии достаточно схожи, чтобы навыки и передача кода были очень хорошими, в настоящее время WPF имеет много очень полезных функций, отсутствующих в Silverlight, и поскольку Silverlight получает эти функции, он стремится скопировать то, что хорошо из WPF. Таким образом, в конечном итоге все потраченные усилия и код, созданный при разработке приложений WPF, не будут потрачены впустую.

Также обратите внимание, что WPF может работать как в браузере, так и в Silverlight. Когда я создаю веб-приложения для клиентов, которые, как я знаю, будут работать под Windows, я выбираю WPF вместо Silverlight. В настоящее время я занимаюсь преобразованием нескольких приложений Windows в веб-приложения WPF для упрощения развертывания.

Технология веб-интерфейса

Вы были бы дураком использовать ASP.NET MVC в веб-приложении, если бы могли использовать Silverlight. Вещи, которые занимают дни в ASP.NET MVC, занимают часы или минуты в Silverlight. Вещи, которые занимают дни в Silverlight, занимают годы в ASP.NET MVC.

Проникновение Silverlight на рынок в настоящее время составляет около 50% и растет на 2-3% в месяц, и оно будет работать на 99% настольных компьютеров. К следующему году проникновение может составить 85% или выше. Вы должны взвесить риск того, что несколько пользователей не загрузят Silverlight и не получат доступ к вашему приложению, с учетом рисков, связанных с ASP.NET MVC: с ASP.NET MVC ваше приложение будет стоить намного дороже, его разработка займет больше времени. выйти на рынок, иметь меньше возможностей и меньше «богатства».

Тем не менее, если бы был контракт, который я действительно, действительно, очень хотел, и клиенту было неудобно использовать Silverlight, я бы, вероятно, выбрал ASP.NET MVC в качестве второго выбора. Но только если веб-раздел приложения был относительно небольшим.

Коммуникационные технологии

WCF - хороший выбор для обработки ваших данных. В настоящее время он лучше конкурентов, достаточно быстр и хорошо интегрируется с Silverlight, XBAP и WPF. Если у вас нет веских причин выбирать другую технологию веб-сервисов, я бы выбрал WCF.

Что касается эффективности, то двоичный форматировщик WCF примерно так же эффективен, как и все, что вы найдете, и более эффективен, чем типичные протоколы прямого доступа к базе данных, такие как TDS, для шаблонов использования, с которыми вы столкнетесь. Если вам придется использовать форматировщик SOAP для совместимости, вы потеряете некоторую пропускную способность при преобразовании в XML, но в остальном это будет относительно эффективно.

Я использую слой данных под названием «Изумрудное основание данных», который я построил сам, и планирую открыть его в ближайшие несколько месяцев. Он использует одни и те же объекты в веб-службе и на клиенте и ведет себя одинаково независимо от того, подключен он к внутренней базе данных или нет. Это работает очень хорошо, потому что вы едва ли понимаете, что вообще существует коммуникационный уровень. Такой подход делает уровень данных чрезвычайно простым.

Emerald Data Foundation также имеет механизм контроля доступа на основе ролей, который позволяет клиентам получать доступ к данным на основе отношений между объектами данных, так что, например, человек может получить доступ только к своим данным клиента. Это применяется на уровне данных, поэтому никакая разработка уровня пользовательского интерфейса не может случайно предоставить данные, которые не должны быть видны, или сделать несанкционированные обновления.

3 голосов
/ 13 апреля 2010

Как упомянул Sohnee выше, я думаю, что ваш логический архитектурный подход довольно солидный, и я думаю, что WCF - это «выбор». Я уверен, что вы получите свою долю мнений о технологиях презентации и ORM. Я предложу пару вещей на уровне обслуживания, где я провожу много времени в приложениях, очень похожих на ваши:

  • Если вы еще этого не сделали, начните смотреть на AppFabric. Именно здесь Microsoft собирается размещать сервисы WCF и предоставляет вам множество преимуществ, таких как высокоскоростное инструментарий и управление сервисами, которые вы сейчас не получаете из коробки с WCF.
  • Подумайте, какой тип протокола (и, следовательно, привязки WCF) вы сможете использовать на основе вашей сетевой инфраструктуры и инфраструктуры ваших деловых партнеров. Если вы сможете использовать TCP в качестве высокоскоростного транспорта, вы будете в отличной форме, пока он будет работать с вашей сетью.
  • Рассмотрите возможность интеграции MSMQ в свою логическую архитектуру, чтобы обеспечить организацию очереди и гарантированную доставку. Ювал Лоуи имеет несколько превосходных материалов по интеграции MSMQ в своих книгах WCF.
  • Начните думать сейчас о своих сервисных интерфейсах и стратегии управления версиями. Решения, принятые на ранних этапах в этих областях, становятся почти неизменными, когда они делятся с деловыми партнерами.
  • При участии нескольких деловых партнеров подумайте, как вы собираетесь обезопасить эти услуги. Группа Microsoft P & P только что выпустила довольно хорошее руководство по идентификации и управлению доступом на основе утверждений, которое может быть действительно полезным для вас на основе ваших сценариев интеграции.

Надеюсь, это поможет. Не стесняйтесь опубликовать продолжение, если вам нужна дополнительная информация.

3 голосов
/ 13 апреля 2010

Рассматривали ли вы Silverlight + RIA Services? - это естественный выбор для n-уровневой системы с богатым пользовательским интерфейсом. Вы можете использовать его как для интрасети, так и для клиентских приложений.

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

Если ваша команда еще не имеет опыта работы с WPF, я бы порекомендовал придерживаться WinForms для настольного клиента, предполагая, что у вас не хватает графика (а какой проект нет?) WPF чрезвычайно мощный, но также имеет крутая кривая обучения. Я использовал его для относительно небольших проектов с низкой видимостью, и это дало мне свободу по-настоящему узнать, как следует использовать технологию, а не пытаться объединить что-то вместе, как если бы это были просто WinForms с более симпатичными элементами управления.

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

0 голосов
/ 14 апреля 2010

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

Если это только приложение для ввода данных, вы можете просто создать несколько экранов и жить с ними. Это была бы самая простая вещь, которая может работать.

С другой стороны, если причины, по которым изменения данных важны для бизнеса, я бы сначала рассмотрел создание надежной модели предметной области. И затем слой команд поверх этого. Клиентское приложение будет выдавать команды для изменения данных, такие как «Дать пользователю Xxx повышение заработной платы», которое будет утверждено и затем обработано. Такие команды будут первоклассными гражданами в вашей архитектуре.

...