Переходите к N-уровневой архитектуре с помощью WCF?

Я работаю в крупном правительственном агентстве штата, которое немного отстает от времени. Наши навыки устарели, а замораживание бюджета препятствует обучению или найму новых сотрудников / консультантов (увольнение также невозможно). Проектирование бизнес-объектов, реализация шаблонов проектирования, создание библиотек кода и служб, модульное тестирование, контроль версий и т. Д. - это все, чего вы здесь не найдете. Мы получили столько 0 на тесте Джоэла, насколько это возможно. Хорошая новость в том, что отсюда мы можем только подняться!

Мы разрабатываем настольные приложения CRUD (на C ++, C # или Java), которые обращаются к базе данных Oracle напрямую через соединение ODBC. В основном у нас есть графический интерфейс, заваленный операторами SQL и лоскутным кодом. Нам сказали перейти к сервис-ориентированной n-уровневой архитектуре, чтобы предотвратить прямой доступ к базе данных и устранить необходимость клиента Oracle на пользовательских машинах.

Является ли WCF тем путем, по которому мы должны идти? Мы выполнили несколько пошаговых руководств по многоуровневому приложению (например, этот), и их легко реализовать, но мы просто недостаточно знаем, чтобы понять, рассматриваем ли мы даже правильные технологии. Использование сгенерированных .NET типизированных наборов данных кажется хорошей временной возможностью, позволяющей сэкономить нам месяцы / годы работы (в отличие от создания новых бизнес-объектов с нуля для множества проектов). Пригоден ли этот стандартный подход для первого шага?


person BikeMrown    schedule 21.04.2009    source источник
comment
Спасибо за вклад от всех. Похоже, мы можем провести тщательную проверку концепции. Поскольку очень много ответов повторяли одно и то же, я просто выбрал первый.   -  person BikeMrown    schedule 22.04.2009


Ответы (5)


Недавно я начал использовать службы WCF для уровня данных в некоторых веб-приложениях, и я должен сказать, что это разочаровывает вначале (первую неделю или около того), но оно того стоит после развертывания кода.

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

Из описания среды, в которой вы находитесь, я уверен, вы почти сразу почувствуете выгоду.

person Jimmie R. Houts    schedule 21.04.2009
comment
Не могли бы вы ответить на вопрос stackoverflow.com / questions / 9498962 /? - person LCJ; 29.02.2012

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

Могут возникнуть некоторые головные боли, когда вы начнете пытаться заставить WCF работать способом, специально не разработанным из коробки. Обычно это проблемы конфигурации. Но такие сайты, как этот или IDesign, могут помочь вам в этом.

person Sailing Judo    schedule 21.04.2009
comment
Не могли бы вы ответить на вопрос stackoverflow.com / questions / 9498962 /? - person LCJ; 29.02.2012

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

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

Затем о выборе технологии. WCF определенно является хорошим выбором для связи между вашими клиентскими приложениями и уровнем служб. Я полагаю, что и ваши клиенты, и ваш уровень обслуживания станут приложениями C #? Это значительно упрощает работу, поскольку взаимодействие между различными платформами (например, Java / C #) все еще нетривиально, хотя в большинстве случаев оно должно работать.

person Ronald Wildenberg    schedule 21.04.2009
comment
Да, и клиентский, и сервисный уровни будут перемещены исключительно на C #. Я понимаю вашу точку зрения о бизнес-объектах. Я просто подумал, что типизированные наборы данных могут сделать переход немного менее пугающим для некоторых наших разработчиков, поскольку они узнают больше о дизайне объектов. - person BikeMrown; 22.04.2009
comment
Я не согласен с тем, что типизированные наборы данных научат вас больше об объектно-ориентированном дизайне, скорее, наоборот. Они представляют собой тонкий слой вокруг DataReader, и многое происходит за кулисами, чтобы заставить их работать так, как они делают. Не совсем прозрачная технология и довольно сложная, когда вы начинаете ее использовать. - person Ronald Wildenberg; 22.04.2009
comment
Мой комментарий мог ввести в заблуждение. Я согласен с вами в отношении типизированных наборов данных и их противоречий. Я имел в виду типизированные наборы данных как временную остановку для продвижения проекта, а не как учебный опыт для бизнес-объектов. Ваша точка зрения заставляет меня задуматься, не запутает ли это их только из-за непрозрачной / сложной природы технологии. - person BikeMrown; 22.04.2009
comment
Что ж, это просто мой опыт работы с технологиями. Возможно, вы захотите рассмотреть другую технологию доступа к данным, например Entity Framework. У него есть некоторая кривая обучения, но это даст вам большую гибкость. И, к сожалению, у него есть некоторые ограничения на то, что вы можете отобразить в своей базе данных (поэтому сначала проверьте это). - person Ronald Wildenberg; 23.04.2009

Взгляните на Entity Framework (поскольку для него уже есть несколько поставщиков Oracle) в сочетании с .NET 3.5 SP1, который обеспечивает встроенную сериализацию WCF ваших классов, созданных EF.

Вот хороший блог для начала: http://blogs.msdn.com/dsimmons

person Kwal    schedule 21.04.2009

CSLA может хорошо подойти для настольных приложений N-уровня. Он поддерживает WCF, имеет большое сообщество разработчиков и хорошо документирован. Он очень объектно-ориентированный.

person Todd Stout    schedule 22.04.2009
comment
Очень интересно! Я еще не сталкивался с CSLA, и это выглядит многообещающе. Спасибо за совет. - person BikeMrown; 22.04.2009
comment
Одним из приятных аспектов CSLA является то, что вы можете выбрать использование удаленного взаимодействия, WCF или пользовательского протокола, просто изменив конфигурацию, а не свой код. Через пару лет у Microsoft может появиться еще одна предпочтительная коммуникационная структура. CSLA может дать вашему приложению некоторую изоляцию от этого. - person Todd Stout; 23.04.2009
comment
Не могли бы вы ответить на вопрос stackoverflow.com / questions / 9498962 /? - person LCJ; 29.02.2012