Продолжаем наше ранее начатое знакомство с Visual Studio LightSwitch. Но прежде чем начать наше дальнейшее погружение в специфику и философию этого продукта, позвольте, очень кратко остановится на необходимой для этого теории.
Итак, LightSwitch жестко завязан на известную среди специалистов модель разработки MVC. Я считаю это большим плюсом, ибо, даже если полный новичок в разработке ваяет с помощью LightSwitch своё первое, пусть и несколько синтетическое приложение, система сконструирована таким образом, что сразу заставит его сделать всё правильно — отделяя логику от оформления и так далее. Чтобы быть понятным для неспециалистов (а именно для них в первую очередь и предназначена моя обзорная статья, равно как и обсуждаемый продукт, кстати, тоже), сначала дадим все необходимые определения и пояснения.
Model-view-controller (MVC) — уже стандартная схема использования шаблона проектирования, с помощью которого модель данных приложения, его пользовательский интерфейс и взаимодействие с пользователем — функционально разделены на три отдельных подсистемы так, что дальнейшая модификация или какая-либо корректировка одной из этих подсистем оказывает в худшем случае минимальное воздействие на остальные (а в лучшем и идеальном случае — и вовсе никак не затрагивает их). Данная схема практически повсеместно используется для построения архитектурного и структурного каркаса почти любого современного приложения.
О’кей, заканчивая с этим мудреным для новичка определением, ещё раз подчеркну: любое LightSwitch-приложение автоматически создается по этой классической трехуровневой схеме:
Давайте посмотрим на картинку-график ниже, которая хорошо суммирует это моё суховатое описание:
Хорошо, теперь оттолкнемся от уже усвоенного и добавим технических деталей, чтобы конкретизировать все сказанное. Уровень представления реализован с помощью Silverlight 4.0, — это внешний вид приложения. Неважно, десктопное ли это приложение или оно специально создано для браузера, везде в качестве базы для реализации всех графических возможностей будет использован Silverlight 4.0.
Тут есть некоторые детали, из многообразия которых я упомяну лишь то, что LightSwitch-приложение для Windows конфигурируется и запускается с повышенными привилегиями из-под спецпроцесса sllauncher.exe (он обеспечивает прямой доступ к ряду сервисов Windows, например, возможность взаимодействия с компонентами Microsoft Office). При работе же в браузере, такое приложение может теоретически выполняться в любом браузере и на любой операционной системе, где установлен плагин Silverlight 4.0, но с целым рядом ограничений.
Далее, уровень логики сделан на основе служб WCF RIA DomainServices, крутящихся под управлением ASP.NET 4.0. При этом вы сами вольны выбирать, где они будут физически расположены:
В этом же уровне представления есть несколько способов доступа к хранилищу данных (рассмотренному чуть ниже в свой черед), из которых здесь я бы выделил лишь два: «серьёзный и универсальный способ» — ADO.NET Entity Framework, а также отчасти «офисный протокол» — OData (базирующийся на REST, Atom/XML и JSON, кстати).
И, наконец, третья ступенька в нашем строго ступенчатом стиле рассмотрения — это уровень данных. Тут вариантов превеликое множество (всё зависит от наличия лично у вас провайдера для каждого конкретной БД), но я бы опять же выделил два наиболее вероятных и органичных для решения от Microsoft способа — это более традиционный сервер баз данных SQL Server или его облачный аналог — Microsoft SQL Azure.
Чтобы подбить всю эту груду слов к удобному «итого», опять же давайте взглянем на диаграмму компактно представленную ниже:
Чтобы подвести итог в этом пункте, с помощью Visual Studio LightSwitch можно создавать двухуровневые или трехуровневые приложения для настольных систем, а также трехуровневые веб-приложения. Способ же развертывания такого приложения (диплой) — полностью зависит от выбранного вами типа клиента и топологии сервера.
При этом существует три основных сценария использования LightSwitch:
LightSwitch использует более приближенные к реальной жизни типы данных, здесь минимум узкоспециализированных программистских понятий. К примеру, вам будут доступны следующие поля для реальных бизнес-приложений: e-mail-адрес, изображение, телефонный номер, денежная сумма и так далее.
У LightSwitch есть возможность настраивать формы (окна создаваемых приложений) прямо во время исполнения приложения (имеется в виду в среде разработке). В каждом таком запущенном приложении в верхнем-левом уголке появляется следующий значок с надписью «Customize Screen»:
Если щёлкнуть по нему, то появится следующее меню-настройки режима кастомизации, со всеми списками, редактором свойств и экраном предпросмотра:
Второе интересное отличие, касающееся конструирования форм: здесь нет визуального дизайнера форм, по-крайней мере в том виде, в котором это представлено в традиционной Visual Studio.
Внизу я привожу скриншот редактора форм, чтобы это лучше увидеть самому — фактически это большая панель из всевозможных иерархических свойств и методов доступных для конструирования определенных особенностей формы. Последовательно выбирая их — вы настраиваете (генерируете) внешний вид и функциональные свойства конечной формы.
Чтобы пояснить предыдущую мысль, вот несколько наглядных примеров. Мне нужно добавить в тестовое приложение нового автора, для этого я создаю соответствующую кнопку. Ниже пример диалога в LightSwitch, через который я описываю эту новую кнопку на форме:
Кроме кнопки в моем случае, для этого придётся всё-таки написать какой-то минимальный кусок кода, вот его пример:
partial void NewAuthor_Execute() { this.propAuthor = new Author(); this.FindControl("GroupAuthor").IsVisible = true; }
После добавления нового автора (через новую кнопку) и заполнения всех соответствующих полей связанных с ним, нужно сбросить эти данные в базу. Для этого я создаю ещё одну кнопку вот с таким обработчиком:
partial void SaveAuthor_Execute() { this.ArticleProperty.Author = propAuthor; this.Save(); }
В итоге, пройдя череду настройки всех полей формы, последовательного добавления кнопок Добавить (New Author) и Сохранить (Save Author), я получил в итоге примерно вот такую вот форму:
Поскольку моя разработка уже готова — я должен опубликовать её, то есть подготовить конкретную сборку для выбранной среды (смотрите диапазон для возможного выбора в первой части этой статьи). Самый простой (я бы сказал, что немного бездумный) способ для этого — воспользоваться услугами LightSwitch Publish Wizard. Первое что у вас спросят в этом случае — хотите ли вы получить десктопное или веб-приложение?
После этого предстоит выбор того, где же будет хоститься бэкенд вашего приложения, и, наконец — выбрать тип базы данных, которая будет хранить информацию (после чего, туда будут сразу же экспортированы данные накопленные во время разработки приложения). Ниже приведенные скриншоты показывают некоторые из этих шагов (обратите внимание, что доступны обширные настройки безопасности и доступа, а также другие важные параметры, которые не были описаны мною в этом очень общем описании).
Прошу понять меня правильно: в этой поверхностной зарисовке цикла создания LightSwitch-приложения, я не ставил перед собой задачу научить чему-то читателя, ибо в таком малом объеме текста это просто невозможно; а рассматривал лишь возможность дать быстрое впечатление о типичных особенностях разработки в LightSwitch.
LightSwitch, фактически, конструктор для создания приложений баз данных (и разработки самих баз данных тоже). При этом, здесь вы нигде не встретите SQL. Здесь есть полностью визуальный редактор для настройки всего необходимого и связанного с базой данных, при этом главный движущий механизм всего механизма — LINQ (Language Integrated Query), — остаётся где-то в дебрях самой среды, хотя по всем признакам его присутствие ощущается везде и повсюду.
Позвольте пояснить: SQL знают очень многие, но его здесь нет; у LINQ есть определенные преимущества, не спорю, но LINQ — не самая подходящая технология для новичка, поэтому принято решение сделать что-то вроде графико-визуального сборщика LINQ-запросов — Query designer. Лично для меня было бы здорово, если бы дополнительно предоставлялась возможность при этом показывать (и как-то редактировать) конечную полученную строку запроса/подключения (будь это в формате SQL или LINQ), но здесь этого нет, к сожалению.
В рамках вышеприведенной констатации, позвольте развить предыдущий пункт до его логического завершения. Итак, здесь нет ни SQL, ни LINQ, что же здесь есть? Предполагается, что такой до предела визуализированный подход сделает разработку серьёзных приложений более доступной и простой для непрофессионала. Давайте посмотрим, что получается в реальной жизни. Я взял для примера базы данных, хотя подобные противоречия имеются и в других местах этой системы проектирования.
С одной стороны — у нас здесь очень доступные и очевидные типы данных (как я описал их выше), с другой — при построении отношений внутри той же базы данных через Relationship Builder, требуется очень хорошее понимание базисных основ устройства реляционных баз данных
Смотрите на скриншоте снизу: здесь нам требуется выбрать отношение многие-к-многим между всеми другими вариантами, а также попутно настроить каскадное удаление для всех экземпляров.
И это заставляет реально задаться вопросом: кто действительный клиент этой среды разработки, какова её ниша и область применения?
Итак, я утверждаю, что как бы красиво не звучала реклама, LightSwitch всё же требует определенных знаний: в разработке с его помощью будут встречаться места, которые невозможно осилить лишь на интуитивном уровне, обязательно придётся хотя бы немного подучиться. И с другой стороны — как только настоящий программист начнет во всём этом детском конструкторе ковыряться всерьёз, то вероятно, он тут же обнаружит, что ему гораздо проще писать код напрямую, видя в виде листинга все параметры, методы и аргументы в явном виде, а не под толстым слоем множества визуальных интерфейсных примочек, которые дополнительно требуют ещё и своего адекватного истолкования (с точки зрения сугубо технического специалиста, так как в большинстве своем они заточены под гуманитария и его обывательское понимание).
В качестве противовеса, я всё же хочу похвалить LightSwitch в том плане, что они сделали максимально ясный продукт, насколько это вообще возможно в рамках современной GUI-парадигмы. К примеру, внизу приведен ещё один скриншот-пример создания связей между таблицами для иллюстрации:
У LightSwitch самая низкая цена среди всего семейства продуктов от Visual Studio, при этом нет и не планируется его бесплатная версия.
Приложения созданные под LightSwitch обладают встроенной по-умолчанию поддержкой облачных технологий, то есть теоретически они должны масштабироваться очень и очень широко для такого класса любительских продуктов. Вы также всегда можете с минимальными усилиями превратить ваше десктопное приложение в веб-приложение, далее расширив его под сообразную для ваших задач инфраструктуру. Огромное количество типовых шаблонов приложений на все случаи жизни, создавать свои приложения на базе которых и вовсе проще простого, возможность создавать любое по сложности и красоте GUI, всеядность в плане сред и технологий....
Файл ApplicationDefinition.lsml описывающий на автоматически-сгенерированном XAML графическую разметку приложения
Здесь в полной мере реализован уже стандартный модуль управления пользователями (CRUD) и многое-многое другое, что, увы, невозможно рассмотреть в рамках столь ограниченной по объему статьи. Я попытался выборочно рассмотреть лишь отдельные возможности и преимущества этой среды, честно коснувшись и недостатков, а также очертить собственно круг применения MS LightSwitch, предварительно попытавшись представить целевой контекст для подобного рода разработок.
При написании этой статьи мною были частично использованы обучающие материалы от Microsoft — в первую очередь замечательная вводная брошюра "Visual Studio LightSwitch — Первое знакомство" от Алексея Федорова, с которой я и рекомендую всем начать изучение этой замечательной и относительно новой среды разработки для полупрофессионалов, если позволите мне так обозвать категорию продвинутых компьютерных юзеров (но не имеющих, или почти не имеющих опыта в современном традиционном программировании).
1 комментарий
Отличная ознакомительная статья, спасибо!