Denis Gladkikh
Russian   |  English

Первые впечатления о LightSwitch

lightswitch

Как и многие скачал я себе LightSwitch, недавно он стал доступен для MSDN подписчиков. Скачивал и устанавливал я его не просто так, чтобы посмотреть, а у меня в голове были уже идеи, как это можно было бы использовать в текущем проекте. Наш основной проект сейчас – это модульное Silverlight приложение, один из модулей – это административная часть с кучей редактируемых таблиц (буду называть их справочниками). Мне не хотелось делать отдельные представления на каждый справочник, потому я сделал механизм, который позволял просто заполнять DataGrid по имени таблицы и списку полей. Причем поля можно указываться и из таблиц, на которые есть ссылки (reference) из главной таблицы, на сервере построится правильный join. Так же реализовал свой DataForm, к сожалению стандартный расширить не получилось, из-за того что там были спрятаны некоторые необходимые методы и свойства, и помню, что в WPF эти свойства спрятаны не были, ну да ладно. В итоге, на сервер передаются объекты и построенные запросы: что нужно отобразить, что показать. То есть, чтобы добавить редактирование новой таблицы CronTask мне теперь необходимо сделать буквально следующее

<Views:ListEditControl>
  <Views:ListEditControl.DataContext>
    <ViewModel:ListEditViewModel MainTableName="CronTask" >
      <ViewModel:ListEditViewModel.MetadataColumns>
        <Controls:DynamicMetadataColumn HeaderText="Task Type" Column="Name" Table="TaskType" />
        <Controls:DynamicMetadataColumn HeaderText="Periodicity" Column="Periodicity"  />
        <Controls:DynamicMetadataColumn HeaderText="Is Active" Column="IsActive"  />
        <Controls:DynamicMetadataColumn HeaderText="Finish Only When Successful" Column="FinishOnlyWhenSuccessful"  />
        <Controls:DynamicMetadataColumn HeaderText="Company" Column="CompanyName" Table="DuneClientCompanies"  />
      </ViewModel:ListEditViewModel.MetadataColumns>
      <ViewModel:ListEditViewModel.MetadataFields>
        <Controls:DynamicMetadataField HeaderText="Task Type" Column="TaskTypeID" ReferenceShowingColumn="Name" />
        <Controls:DynamicMetadataField HeaderText="Periodicity" Column="Periodicity"  />
        <Controls:DynamicMetadataField HeaderText="Is Active" Column="IsActive"  />
        <Controls:DynamicMetadataField HeaderText="Finish Only When Successful" Column="FinishOnlyWhenSuccessful"  />
        <Controls:DynamicMetadataField HeaderText="Company" Column="CompanyID" ReferenceShowingColumn="CompanyName" />
      </ViewModel:ListEditViewModel.MetadataFields>
    </ViewModel:ListEditViewModel>
  </Views:ListEditControl.DataContext>
</Views:ListEditControl>

Это решение я писал еще на Silverlight 3, потому я особо не хочу вдаваться в подробности реализации, могу сказать только то, что сейчас я бы реализовал это немного по-другому, так как в Silverlight 4 уже есть динамические объекты (dynamic), а они бы сильно облегчили реализацию, и, скорее всего, мне бы удалось использовать стандартный DataForm. Так вот, таблиц для редактирования в админской части становится все больше, все больше таблиц нам нужно отображать для администраторов компаний, а это заказчики – для них нужно делать красиво. Необходимо делать все более юзабильнее и красивее, а понятно, что мое решение приходится постоянно сильно дорабатывать, и чем больше дизайнер старается, тем все ближе момент, когда эта реализация станет проигрывать по затраченному времени на обычную реализацию «в лоб». Так вот я сейчас искал замену этой реализации, и вариантов было несколько.

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

Второй – это сделать «в лоб», тогда у дизайнера появится прямая возможность редактировать пользовательские интерфейсы как угодно. Единственное, все-таки хочется по максимуму упростить себя жизнь при помощи ORM на сервере, вроде Entity Framework и сервисов, вроде WCF RIA Services. А на клиенте, что захочет дизайнер то и будет. По началу, конечно же, будут стандартные DataGrid и DataForm. Минусы тут ясны, любой новый справочник – это куча нового кода: перегенировать объекты Entity Framework, сервисов, добавить View и т.п., но, вроде все можно возложить на Visual Studio и может быть затраты будут не такие уж и большие.

Третий вариант – это сделать модуль на основе LightSwitch. Тут-то я вот и разочаровался в LightSwitch. Честно, по видео и первым попыткам обуздать этот продукт я был уже на 90% уверен, что, скорее всего, его и буду использовать для админской части, легко настраивается, легко строятся странички для редактирования справочников, все очень шустро, юзабильно – бери да пользуйся. Но не тут-то было, так просто внедрить это детище в свой продукт не получится, все спрятано от разработчика как можно дальше. Единственное, что честно сейчас можно редактировать – это методы форм: добавлять что-то на OnSaving, на OnSaved или какие-нибудь другие и все. Оно и понятно, начни править в серверном коде, так все начнет валиться, и все будут сваливать на продукт, что сырой и недоработанный. Понятное дело, что LightSwitch будет хорошо расширяем: будет возможность добавлять свои расширения и темы для него, но это будет разработка на основе LightSwitch, а не использование LightSwitch в своем приложении и мне не подходит. Код, что генерирует LightSwitch, я все же посмотрел через файловый менеджер (так же можно открывать файлы классов через Object Browser в Visual Studio) – поддерживать и править его точно не вариант.

Если есть вопросы к LightSwitch, но нет возможности его попробовать, можете задать тут – попробую проверить и дать ответ. Мне, как я и говорил в подкасте 2Гига, этот продукт пока что становится неинтересным (занятным, но все же неинтересным).


Вас также может заинтересовать

rss twitter

Комментарии (16)

Jeje ( ) #
avatar
Отлично, начинают появлятся обоснованные ответы. Сегодня мне тоже довелось пощупать, но к единому мнению не пришел, не хватает чего-то, по функционалу.
Mike Chaliy ( ) #
avatar
ИМХО просто надо выбирать нужные тулзы под нужные задачи. LightSwitch просто не предназначен для встраивания. Это как пробовать встроить IE, забывая про MSHTML. Короче, LightSwitch это обертка над RIA Services. Хотите встраиваемое? RIA Services и вуаля.
Denis Gladkikh ( ) #
avatar
Jeje, функционала пока действительно не много вроде, запутаться там негде.

Mike Chaliy, пока не попробуешь - не узнаешь. У LightSwitch время жизни то пока что неделя, и что там будет потом - не известно. Это не как встраивать IE, это как встраивать Sharepoint в свой проект, а это у меня получалось :)

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

Проект только на одного разработчика? Ну как то не круто.
awhiler ( ) #
avatar
LightSwitch - это попытка сделать замену access, на стероидах, целевая аудитория, никак не проффесиональные разработчики, а "продвинутые пользователи".
Нам с ним придется иметь дело только в сценарии "пользователь написал - нам поддерживать (переписывать)"
vittore ( ) #
avatar
Я бы вот про встраивание шарепоинта почитал =) Было уже где то ?
Denis Gladkikh ( ) #
avatar
vittore, видимо это больная тема для многих, я про это не писал. Было это, на самом деле, давно. С Sharepoint/WSS у меня в целом, наверное, около года было практики.

Подробно вам описать вряд ли смогу, но в целом было два варианта встраивания:

а) клали наш сайт в Sharepoint папку сайта, но в целом получалось что наш сайт запускался первым (редиректили с default.aspx страницы Sharepoint на первую нашу), и наш сайт отображал несколько страниц Sharepoint у себя. Отображали вебпарты календариков, пары списков и т.п.

б) был другой вариант, наш сайт крутился отдельно, а на Sharepoint перекидывало иногда, там у нас были форумы, календари и несколько workflow, в общем то что дает Sharepoint. Совместная работа у них была при помощи API Sharepoint – создавались списки, импортировались роли из нашего сайта, настраивался он программно, а визуально они выглядели как отдельный Sharepoint и наш сайт, просто ссылки друг на друга были и имели схожий дизайн.

Вот как то так все было. Ну и был конечно третий вариант, когда делали на самом Sharepoint, доделывали его, допиливали.
vittore ( ) #
avatar
Больная больная ))
мы честно говоря для себя выбирали в свое время третий вариант, и совместно используя инфопас и шарепоинт сделали почти все что хотелось , остальное решили с шарепоинт вообще не интегрировать.
просто покуда заговорили о том что использование лайтсвитч то же что и прикручивание шарепоинта для Вас, я подумал что может быть реализовывали чтото вроде большого модуля - вебпарты для шарепоинта который вытаскивал то что надо с другого приложения, видимо чтото вроде в третьем варианте у вас и было.

а вообще пишите больше просто про риа сервисы =)
Denis Gladkikh ( ) #
avatar
vittore, про RIA у меня вроде еще ни одного поста не было, эту тему хорошо расписал в свое время Сергей Звездин. Но вообще в будущем скорее всего к этому тоже все придет.
vittore ( ) #
avatar
предположил просто что вы по работе их используете совместно с сильверлайт.

а ссылку на зведина не кините? в его блоге чтото я не нашел
Denis Gladkikh ( ) #
avatar
vittore, казалось что у него в блоге были освещены некоторые темы, может и ошибаюсь.
Марина ( ) #
avatar
Тоже установила, буду разбираться.
Ctraveller ( ) #
avatar
А как в Switchlight c поддержкой разных источников данных например ODBC, Oracle ?
Denis Gladkikh ( ) #
avatar
Ctraveller, LightSwitch по идеи должен поддерживать все источники данные, которые поддерживает Entity Framework, потому и с Oracle быть проблем не должно. Список провайдеров: Entity Framework ADO.NET providers
Алексей ( ) #
avatar
посмотри как сделано на ECO/
www.capableobjects.com
theblog.capableobjects.com

ViewModel + WECPOF(кажется так). там же есть все для SL. примеры есть, и автоформы не такие уродские и можно настраивать их вид, лепить свои обработчики и прочее.
Denis Gladkikh ( ) #
avatar
Алексей, то что у них уж очень сейчас напоминает по внешнему виду, что есть и меня сейчас. Все на стандартных DataGrid и DataForm все сделано. Дизайн тот, что по умолчанию в SL. Это я по этому сужу http://theblog.capableobjects.com/2010/08/silverlight-viewmodel-usercontrol.html
Костя ( ) #
avatar
Буду пробовать
Добавить комментарий

Если вы хотите получать уведомления о новых комментариях к данному топику, укажите, пожалуйста, email и отметьте соответствующий пункт в форме. Если вы хотите добавить код в тексте комментария, то заключите его внутри тега [code]...[/code], более того можно уточнить язык, на котором написан данный код при помощи [code cs]...[/code], где вместо cs могут быть cs, html, xml, java, js, php, sql, cpp, css.

 

busy