2010-03-25 1 views
0

ПРЕДПОСЫЛКА: Я сейчас работаю над приложением .NET WinForms (C#) с базой данных ADO.net для слоя данных.как можно будущая миграция локального слоя данных ADO.net на будущий веб-интерфейс (веб-сервис или REST)?

ВОПРОС: Как я сейчас это создаю, чтобы было легко перенестись в модель, где слой данных абстрагируется через веб-службу HTTP или интерфейс REST?

Например, просто использовать стандартный интерфейс C# с фабрикой, чтобы получить конкретную реализацию интерфейса, где это использует ADO.net, лучше?

благодаря

ответ

2

На самом деле то, что вы хотите сделать, это сделать свои 2-х уровневые приложения (Application < -> Базы данных) изменения в систему многоуровневой (Application (ы) < -> App сервер < - -> База данных).

Это комплекс изменение, потому что вам нужно думать о безопасности, бизнес-логике и многом другом.

Одной идеей может быть использование сторонней библиотеки, например DataAbstract. Это полноценная инфраструктура n-Tier, позволяющая использовать такие функции, как LINQ, для удаленного источника данных и сделать разработку n-уровня более простой. Он также предоставляет интерфейс веб-сервиса для легкого доступа к вашей бизнес-логике на уровне приложений из любого источника. В дальнейшем он предоставляет вам клиентские библиотеки для iPhone, а также Windows Mobile, которые позволяют вам быстрее (потому что бинарный) доступ к этому слою. Вам понадобится интерфейс веб-службы только для платформ, для которых DataAbstract недоступен.

1

Вы попали в гвоздь на голове - это абстракция. Начните прямо сейчас, отвлекаясь от семантики, специфичной для хранилища, в вашей бизнес-логике. Разработайте чистый объектно-ориентированный DAL и выполните через него все операции CRUD/Query, и пока ваша объектная модель (или модель домена, если вы хотите узнать разницу между ними), может использовать конкретные классы, ваши DAL-операции должны быть определены в интерфейсе. Независимо от того, используете ли вы фабрику, зависит ли ваш конкретный вариант использования, но если вы развиваетесь с такой абстракцией, имеет смысл принять инверсию контейнера управления и обработать этот вид проводки путем инъекции зависимостей. Therearelotstochoosefrom.

+0

Если мне все еще нужно указывать интерфейсы, контейнер IOC должен быть переполнен только для того, чтобы связать код клиента с кодом с кодом доступа к данным? Просто интересно, какое большое/сложное приложение должно быть перед добавлением IOC, сделает его более простым, а не более сложным? – Greg

+0

Поддержка консорциума во многих популярных контейнерах .Net IoC делает входной порог очень низким. Я бы сказал, если у вас есть более четырех или пяти интерфейсов, для которых вам необходимо предоставить различные реализации на основе конфигурации или контекста, пришло время начать просмотр контейнера IoC. К тому времени, когда вы доберетесь до десяти или более, вы определенно там. Как всегда, YMMV. И, конечно же, вам не нужно указывать интерфейс для ваших операций DAL (a la 'ISession' для NHibernate), но хорошая практика программирования зависит от абстракций, когда это возможно. – Dathan

1

Вы никогда не захотите абстрагировать DAL с интерфейсом REST. Интерфейс REST - это то, что вы напрямую открываете для «User Agent». Вы никогда не захотите, чтобы ваш бизнес-уровень потреблял данные через REST.

Единственное исключение - если ваша основная цель состоит в том, чтобы разоблачить необработанные данные для какой-либо третьей стороны.

+0

Darrel - что вы порекомендовали бы, если бы миграция была толстым клиентом WinForms на рабочем столе (богатый клиент), который тогда говорил с бэкэнд? Вы бы порекомендовали веб-сервисы для этого? Но я понял, что HTTP REST - это еще одна форма веб-службы, основанная на протоколе с меньшими накладными расходами? – Greg

+0

Вы можете сделать богатое клиентское приложение, которое ведет переговоры с службой REST. Тем не менее, он заканчивается тем, что он довольно неглубокий, поскольку вся логика приложения движется за интерфейсом REST. IMHO «Веб-сервисы» - это способ отображения библиотеки функций удаленному клиенту именно так. REST - это подход к созданию распределенных приложений, обычно по HTTP, и говорит намного больше о том, как должны быть созданы ваши компоненты распределенных приложений и как они должны взаимодействовать. REST - это намного больше, чем просто легкий веб-сервис. –