Кратко о Patterns & Practices: SharePoint Guidance

Интро

clip_image001

В данной статье я хочу произвести обзор руководства под названием “SharePoint Guidance” от подразделения Microsoft patterns & practices. Данное руководство предназначено разработчикам/архитекторам SharePoint, в нём описаны основные принципы построения систем на данной платформе. Над руководством трудились выдающиеся представители разработки под SharePoint, а так же он упорно держится в списке самых активных проектов на CodePlex. Далее чуть подробнее.

Описание руководства

Руководство фактически состоит из нескольких аспектов:

  1. SharePoint Guidance Library – библиотека наиболее используемых и полезных функций, таких как управление конфигурацией, абстрагирование слоя данных, логирование событий и сервисная инфраструктура
  2. Документация, в которой подробно описаны все принципы построения приведенных примеров, а так же руководства по основным вопросам, возникающим в разработке на SharePoint.
  3. Contoso Partner Portal Reference Implementation – показательное приложение на MOSS некоей компании Contoso, являющее собой экстранет-портал, в приложении используются практики наиболее приближенные к промышленным решениям.
  4. Contoso Training Management Reference Implementation – простое приложение HR-отдела, демонстрирующее базовые принципы построения решений на WSS.
  5. QuickStarts – два небольших примера самых простых приложений на SharePoint, а так же доступа к данным

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

image

Обзор руководства

1ая версия вышла в прошлом году (Dec2008), в настоящее время доступна 2ая версия данного руководства (Aug2009), о ней и будет идти речь.

  • Introduction – небольшое введение, а так же рекомендации к инструментам разработки: VSeWSS, U2U CAML Query Builder, CAML.NET, Typemock Isolator
  • Developing SharePoint Applications – основные сценарии разработки под платформу, а так же её ключевые возможности
  • Design and Development Guidelines – отображены ключевые моменты архитектуры SharePoint, а так же описаны подходы решения тех или иных задач разработки под платформу; описаны рекомендации к управлению жизненным циклом проектов
  • Application and Design Patterns – одна из наиболее интересных глав, в ней описаны как классические паттерны построения корпоративных приложений ложатся на решения под SharePoint
  • The SharePoint Guidance Library – описание библиотеки со всеми ключевыми возможностями и компонентами для разработки
  • Integrating Line-of-Business Systems – описание интеграции с существующими корпоративными системами
  • Considerations for Content-Driven Applications – здесь можно узнать о том, как правильно строить приложения, для хранения контента
  • Considerations for Enterprise-Scale Applications – рекомендации по созданию приложений масштаба предприятия
  • Considerations for Extranet Development – рекомендации по разработке и планированию экстранет-порталов
  • Partner Portal Reference Implementation – описание построения приложения-примера для MOSS
  • Training Management Reference Implementation– описание построения приложения-примера для WSS
  • QuickStarts – описание приложения для легкого старта работы с SharePoint

Критика

logo Данное руководство содержит в себе большое количество практичной полезной информации, однако в некоторых технических решениях моя точка зрения расходится с его создателями, в связи с чем мною был начат проект Sapphire: SharePoint Application Framework, который будет так же являться каркасом для построения решений на SharePoint, а так же включать примеры решений и необходимые в повседневной разработке компоненты.

Ресурсы по SharePoint Guidance

Скачать полную версию за август 2009 года можно здесь:

SharePoint Guidance так же представлен на CodePlex: http://www.codeplex.com/spg/ здесь можно задать интересующие вопросы и скачать все последние изменения.

Так же некоторые главы из SharePoint Guidance представлены в видеоряде на channel 9:

Ресурсы по SharePoint

TechNet располагает огромным количеством статей и книг по SharePoint, конечно в них не так много внимания уделено именно разработке, однако для формирования вижна платформы весьма полезно: http://technet.microsoft.com/en-us/library/cc262788.aspx

SharePoint Developer Center здесь можно найти практически всё, что нужно для разработки на SharePoint


Шаблоны сохраняемости

Отличная статья в MSDN Mag April 2009, посвященная шаблонам сохраняемости:

http://msdn.microsoft.com/ru-ru/magazine/dd569757(en-us).aspx

Обзору подверглись следующие шаблоны:

Active Record
Data Mapper
Using a Repository
Identity Map
Lazy And Eager Loading
Virtual Proxy Pattern

Так же о шаблонах сохраняемости можно прочесть в блоге у Александра Кондуфорова:

http://merle-amber.blogspot.com/2009/02/orm.html


Практикум Silverlight: Начинаем работать с Composite Application Library

Для кого эта статья

Данный пост будет интересен для вас если:

  1. Вы нацелены на развитие
  2. Вы работаете с RIA средой, такой как Silverlight (так же WPF)
  3. Если вы уже где-то слышали такие слова как Composite Application Guidance, Composite Application Library
  4. Вы заинтересовались статьей Павла ИвченковаСоздание приложения на WPF с использованием принципов TDD 
  5. Вам было интересно прочитать статью AcervUse Case Driven Development и Composite UI Application Block

Цель статьи

В этой статье вы узнаете основы того, что содержится в Composite Application Guidance, а так же научитесь создавать составные Silverlight приложения на основе Composite Application Library (создадите загружаемый модуль (Module), а так же представление (View), которое отобразите в конcоли (Shell))

Приготовимся

В данной статье нам понадобятся следующие сборки из комплекта Composite Application Library и Unity Application Block:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll
  • Microsoft.Practices.Composite.UnityExtensions.dll
  • Microsoft.Practices.ServiceLocation.dll
  • Microsoft.Practices.Unity.dll

Composite Application Library распространяется в виде исходных кодов, в связи с этим необходимо скомпилировать следующие сборки:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll
  • Microsoft.Practices.Composite.UnityExtensions.dll

Для этого следует запустить исполняемый файл из комплекта

Desktop & Silverlight — Open Composite Application Library.bat

и сбилдить проект в Visual Studio, далее необходимые сборки можно найти в следующей каталоге

CAL\Silverlight\Composite.UnityExtensions\bin\Debug

Приступим

1. Создаём проект с приложением Shell

Для начала создадим Silverlight Application приложение, назовём его HelloWorld.Silverlight, так же не забудем добавить ASP.NET Web приложение для его хостинга. В результате должно получиться примерно следующее:

Dd458947.1153f195-a8e1-43e4-a307-877d6823e346(en-us,MSDN.10).png

Далее добавляем ссылки на необходимые нам сборки:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll
  • Microsoft.Practices.Composite.UnityExtensions.dll
  • Microsoft.Practices.Unity.dll
  • Microsoft.Practices.ServiceLocation.dll

Далее нам необходимо создать консоль (Shell) нашего приложения, для этого переименуем Page.xaml в Shell.xaml, а так же изменим название класса в Shell.xaml.cs c Page на Shell.

Так же нам потребуется изменить файл Shell.xaml:

  1. <UserControl x:Class="HelloWorld.Silverlight.Shell"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;
  4.     Width="400" Height="300">
  5.     <Grid x:Name="LayoutRoot" Background="White">
  6.  
  7.     </Grid>
  8. </UserControl>

* This source code was highlighted with Source Code Highlighter.

Далее нам необходимо узнать, что такое регион (region) и как мы его будем использовать.

Регион (Region) – концептуальный механизм, используемый разработчиками для отображения представлений (view) в определенном месте контрола, а так же для динамической подмены представлений (view).

В качестве хостинга для региона (region) могут использоваться следующие контролы:

  • System.Windows.Controls.ContentControl
  • System.Windows.Controls.ItemsControl
  • System.Windows.Controls.Primitives.Selector
  • System.Windows.Controls.TabControl

Подробнее о регионах (region) можно прочитать по ссылке http://msdn.microsoft.com/en-us/library/dd458944(printer).aspx

Для того, чтобы добавить регион в нашу консоль, мы будем использовать ItemsControl. В Shell.xaml добавим ссылку на пространство имён

  1. xmlns:Regions="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"

* This source code was highlighted with Source Code Highlighter.

а так же добавим контрол ItemsControl

  1. <UserControl x:Class="HelloWorld.Silverlight.Shell"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;
  4.              xmlns:Regions="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"
  5.              Width="400" Height="300">
  6.     <ItemsControl Name="MainRegion"/>
  7. </UserControl>

* This source code was highlighted with Source Code Highlighter.

так же добавим ему атрибут, указывающий RegionManager на текущий регион по имени “MainRegion”

  1. <ItemsControl Name="MainRegion" Regions:RegionManager.RegionName="MainRegion"/>

* This source code was highlighted with Source Code Highlighter.

Bootstrapper

Bootstrapper – механизм для компоновки компонентов нашего приложения.

Мы создадим свой класс bootstrapper на основе присутствующего в Composite Application Library абстрактного класса UnityBootstrapper, который инициализирует компоненты с помощью контейнера Unity, для этого добавим файл Bootstrapper.cs к нашему проекту и определим наследование:

  1. class Bootstrapper : UnityBootstrapper
  2. {
  3. }

* This source code was highlighted with Source Code Highlighter.

Так же переопределим метод создания консоли CreateShell:

  1. protected override DependencyObject CreateShell()
  2. {
  3.     Shell shell = Container.Resolve<Shell>();
  4.     Application.Current.RootVisual = shell;
  5.     return shell;
  6. }

* This source code was highlighted with Source Code Highlighter.

и определение каталога модулей:

  1. protected override IModuleCatalog GetModuleCatalog()
  2. {
  3.     ModuleCatalog catalog = new ModuleCatalog();
  4.     return catalog;
  5. }

* This source code was highlighted with Source Code Highlighter.

Так же необходимо провести инициализацию bootstrapper’а:

  1. private void Application_Startup(object sender, StartupEventArgs e)
  2. {
  3.     Bootstrapper bootstrapper= new Bootstrapper();
  4.     bootstrapper.Run();
  5. }

* This source code was highlighted with Source Code Highlighter.

Можно запустить проект и проверить.

2. Добавляем модуль (Module)

Module – функциональная, слабо связанная единица, предназначенная для комбинации в приложении.

Для этого нам необходимо добавить проект типа Silverlight Class Library и назвать его HelloWorldModule:

image

Добавляем ссылки на сборки:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll

Переименовывем класс Class1 в HelloWorldModule и наследуем его от интерфейса Microsoft.Practices.Composite.Modularity.IModule:

  1. public class HelloWorldModule : IModule
  2. {
  3.  public void Initialize() {}
  4. }

* This source code was highlighted with Source Code Highlighter.

Далее на необходимо зарегистрировать модуль в каталоге нашего Bootstrapper класса, немного изменив метод GetModuleCatalog:

  1. protected override IModuleCatalog GetModuleCatalog()
  2. {
  3.   ModuleCatalog catalog = new ModuleCatalog()
  4.       .AddModule(typeof(HelloWorldModule.HelloWorldModule));
  5.   return catalog;
  6. }

* This source code was highlighted with Source Code Highlighter.

3. Добавляем представление (View)

Создадим в проекте нашего HelloWorldModule модуля папочку Views  и добавим к нему Silverlight User Control под названием HelloWorldView, который будет нашим представлением. Немного подправим HelloWorldView.xaml:

  1. <UserControl x:Class="HelloWorldModule.Views.HelloWorldView"
  2.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  3.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;>
  4.   <Grid x:Name="LayoutRoot" Background="White">
  5. <TextBlock Text="Hello World" Foreground="Green" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Calibri" FontSize="24" FontWeight="Bold"></TextBlock>
  6.   </Grid>
  7. </UserControl>

* This source code was highlighted with Source Code Highlighter.

Region Manager – сервис для несвязанного сопоставления (только с помощью указания имён) представления и региона.

Добавим его в конструктор класса нашего модуля HelloWorldModule через dependency injection и сохраним в поле regionManager:

  1. public HelloWorldModule(IRegionManager regionManager)
  2. {
  3.  this.regionManager = regionManager;
  4. }

* This source code was highlighted with Source Code Highlighter.

Так же зарегистрируем представление в регионе:

  1. public void Initialize()
  2. {
  3.   regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.HelloWorldView));
  4. }

* This source code was highlighted with Source Code Highlighter.

Ну вот вроде и всё. Теперь можно запустить наше приложение:

image

В заключение

Итак, в этой статье вы узнали основы того, что содержится в Composite Application Guidance, а так же научитесь создавать составные Silverlight приложения на основе Composite Application Library (создадили загружаемый модуль (Module), а так же представление (View), которое отображается в конcоли (Shell)). Всё как и было обещано.

Источники

  1. Перед вами был слегка вольный и неполный перевод статьи из Patterns&Practices “Composite Application Guidance for WPF and Silverlight — February 2009”
    Silverlight Hands-On Lab: Getting Started with the Composite Application Library найти её можно по адресу http://msdn.microsoft.com/en-us/library/dd458947(printer).aspx
  2. Скачать руководство и сорцы можно с http://www.codeplex.com/CompositeWPF/