2010-06-23 2 views
1

У меня есть быстрый вопрос, на который я надеюсь, довольно просто ответить. Я пытаюсь создать общую библиотеку объектов Employee для своей компании. Идея состоит в создании централизованной базы данных, содержащей информацию о наших сотрудниках (Иерархия отчетов, Офисные места, Общая информация и т. Д.), А затем создайте общую библиотеку объектов для этой базы данных.Библиотека общих объектов с сохранением

Мой вопрос - это лучший способ создать эту библиотеку, чтобы ее можно было распространять среди приложений.

  • Я создаю автономную библиотеку, которая хранит соединение с базой данных (здесь я вижу проблемы с параллелизмом, и это не кажется правильным).
  • Клиент -> Сервер, а затем развернуть «клиентскую библиотеку» для использования в любом приложении.
  • ИЛИ если бы служба Web/WCF была более подходящей для этой ситуации.
+0

По библиотеке, вы имеете в виду библиотеку классов для доступа к данным сотрудника или библиотеке, как в библиотеке данных? – decyclone

+0

Я имею в виду библиотеку классов, которая может быть реализована любым приложением для доступа к данным сотрудника. – Aver

ответ

1

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

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

Вы правы, чтобы отделять строку подключения от кода, и это легко поддерживает файл .NET .config или настройки приложения.

Я часто предпочитаю небольшую базовую библиотеку с бизнес-логикой, концепциями и потоками, хотя каждый из них может быть разбит. И в рамках этой концепции вы все равно можете раздобыть бизнес из доступа к данным в виде различных сборок для обмена в новом виде доступа к данным. Но придерживаться основного модуля (своего рода «бизнес-ядро» или «двигатель», если хотите).

Вы можете выразить свой "бизнес" ядро ​​через много типов презентаций, например

  • текстовой/консоли IO
  • GUI: WinForms, WPF, Silverlight, ASP.NET, LED/pixelboard и т.д.
  • в качестве командлетов для Powershell интеракции
  • веб-службы выражения
  • виды мобильных приложений
  • и т.д.

Вы можете ускорить разработку с использованием шаблонов для изгиба программного обеспечения по вашему желанию и связанных с ним реализаций, таких как: Microsoft Enterprise Library, ослабьте соединение с инъекцией зависимости, например. Ninject (один из многих), или inversion of control методов и т. Д.

1

Обычно я предпочитаю иметь слой среднего уровня (например, какой-либо сервис Web/WCF между клиентом и базой данных). Таким образом вы отделяете клиентов от базы данных, чтобы вы могли контролировать количество подключений, или вы можете изменить схему базы данных таким образом, чтобы она была прозрачной для клиентов.

В зависимости от ситуации вы можете либо подключить клиентов к службе WCF (предпочтительно в большинстве случаев), либо создать DLL, которая будет завершать соединение с сервисом и выполнять дополнительную обработку на стороне клиента.

1

Это зависит от того, насколько глубоко вам необходимо интегрировать вашу библиотеку в основное приложение. Если вы хотите расширить домен приложения с помощью настраиваемых объектов, у вас есть следующие варианты:

  • Встроенная настойчивость в библиотеке. Вам нужно будет передать строку соединения в класс репозитория, но также база данных должна содержать жестко запрограммированную схему для вашей библиотеки. Если вы используете LINQ to SQL в качестве библиотеки доступа к данным, вы можете пометить объекты с атрибутами сопоставления (см. http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.aspx)
  • Предоставить только библиотеку домена, но реализовать постоянство на внешнем уровне, если ваш уровень данных поддерживает сопоставление POCO (EF 4 do).

Обычно, помещая модель предметной области в отделенной сборки вызывает несколько проблем:

  • Интеграция в приложение. Само приложение обычно предоставляет несколько услуг, таких как доступ к данным, безопасность, ведение журнала, веб-службы и т. Д. Если ваше приложение имеет идеальный дизайн и слои, полностью разделенные друг от друга, нет проблем с добавлением новых объектов, но обычно для уровня доступа к данным требуется наследование от базовый класс, логгер одноточечный, проверки безопасности жестко закодированы в бизнес-логические методы и т. д. Такие приложения должны быть реорганизованы, сервисы должны быть извлечены на интерфейсы, и такие интерфейсы должны быть переданы компонентам в отдельной сборке.

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

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

0

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

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