Как реализовать существующий бизнес-уровень в приложении SilverLight 4.0?

Предположим, что у меня есть собственный бизнес-уровень, содержащий мои бизнес-объекты и мои бизнес-сервисы. И я решил создать «Бизнес-приложение SilverLight» (с SL v 4.0), и я хочу использовать свой уже используемый бизнес-уровень из приложения SL, которое я планирую разработать.

Я знаю, что не могу включить проект, который не является проектом SL.

Можете ли вы посоветовать мне, как я могу этого добиться?

Спасибо


person pencilCake    schedule 20.09.2010    source источник


Ответы (2)


Поскольку SL != .NET, вам потребуется скомпилировать их в сборку Silverlight с помощью компилятора Silverlight. Другими словами, вы не можете потреблять их напрямую без небольшой хитрости.

Один из вариантов — создать проект Silverlight, а затем использовать связывание файлов для совместного использования файлов кода из проекта .NET (без их дублирования). Обычный проект владеет содержащимися в нем файлами, но "связанный" файл включается в компиляцию, но не является полностью собственностью проекта. Файлы связываются в диалоговом окне «Добавить файл > Добавить существующий файл», посмотрите в правый нижний угол, и вы увидите, что можете «связать» существующий файл.

Что вы можете сделать:

  • Имейте свой обычный проект .NET с вашими файлами .cs
  • У вас есть проект Silverlight, который ссылается на файлы кода ваших первых проектов.

Когда вы компилируете проект Silverlight, он будет обрабатывать связанные файлы так, как будто они принадлежат проекту SL (но на вашем диске есть только одна копия внутри вашего проекта .NET).


Проблема, с которой вы можете столкнуться, заключается в том, что не все типы .NET поддерживаются в Silverlight, поэтому, если ваши бизнес-объекты содержат их, ваш код .NET может не компилироваться в Silverlight. Вы можете использовать директивы прекомпилятора, чтобы иметь 2 сигнатуры методов для этих случаев: 1x .NET и 1x SL-совместимость. Вы бы установили директиву (то есть: Silverlight==True), а компилятор выбрал бы одно или другое.

Например:

#IF SILVERLIGHT
    public void SomeMethod(SilverlightType someParam)
#ELSE
    public void SomeMethod(SomeDotNetType someParam)
#ENDIF

Вот ссылка с пошаговым руководством от Rocky Lhotka (автор/дизайнер CSLA.net framework) . Он упоминает об использовании связанных файлов и/или частичных классов для выборочной компиляции для каждой платформы.

person STW    schedule 20.09.2010

Если вы пользуетесь службами RIA, вы обнаружите, что можете делать всевозможные хитрые трюки на стороне сервера (включая ссылки на полные библиотеки .Net). Только на клиентской стороне должны использоваться только библиотеки Silverlight.

Проблема с Silverlight на самом деле состоит в том, чтобы представить соответствующие бизнес-правила на стороне клиента с помощью разметки атрибутов RIA и настраиваемых средств проверки.

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

person Gone Coding    schedule 20.09.2010