Отправляет email-рассылки с помощью сервиса Sendsay

.NET: Записки программиста

  Все выпуски  

Быстрее, проще, надежней ...


Информационный Канал Subscribe.Ru



.NET: Записки программиста или хлопок одной ладони


"- Ах, - восхищенно вздохнул он, едва они вошли в лавку,
 - Смотри, вот та дымчатая пирамидка, это тот самый Небесный Гром, да?
- И с ним даже драконы будут меня боятся! Ой, а вон та шкатулка - это же Пыльца Эльфов!
- Она в один момент перенесет меня куда угодно! А этот кинжал, покрытый рунами, тот самый Волчий Коготь?
И я могу его взять?!! Нет, лучше я выберу вот это ... или нет ...
- Возьми лучше плащ.
- Плащ? А что он может? Ни один меч не причинит мне вред, да?  Или я смогу быть невидимым?
- Он теплый.
- Теплый? - недоуменно произнес ученик.
Да, теплый, - терпеливо повторил учитель. Нам предстоит долгий путь, а я слабо представляю,
зачем может пригодится пусть даже полный мешок диковинок насмерть замерзшему путнику."
(Вэн Райс "Бесконечная история")

Выпуск десятый: Быстрее, проще, надежней ...


Доброй ночи!

Сегодня, как и было обещано, мы отвлечемся от философских рассуждений о смысле программирования и займемся сугубо практическими вещами - посмотрим, что сможет нам помочь писать код быстрее, проще и с меньшим количеством ошибок. Если опять таки не рассматривать теории и методологии ("Займись парным программированием - и качество ваших программ значительно возрастет!" - тренер по XP, или "Заполни вот эти 120 форм и документов - и у вас не возникнут вопросы "А кто сказал, что оно должно быть зеленым?" - методист MSF Formal и т.д.), то ответ знают все - вынести служебный код в отдельние модули, превратить эти модули в черные ящики, реализовать внутри них максимально эффективные алгоритмы, отладить до немыслимого совершенства (это вполне реально, ведь каждое использующее их приложение невольно участвует в процессе тестирования) и, вуа-ля:

  • код пишется быстрее - то, что раньше требовало десятков (а иногда и много больше) строк кода, сейчас достигается вызовом одного-двух статических методов

  • код стал проще - из него вынесена значительная часть, не имеющая отношения к бизнес логике, а значит дорабатывать и сопровождать программу будет легче

  • код стал надежнее - меньше кода - меньше ошибок, чем код очевиднее - тем проще в нем разобраться и вносить в него изменения, не боясь что-либо  нарушить

Самый простой, быстрый и результативный шаг в этом направлении - воспользоваться Application blocks фирмы Microsoft (я уже упоминал о них в одном из первых выпусков моей рассылки). Парни из Microsoft Pattern & Practice group  проделали действительно большую работу по борьбе с этропией в программах :) Ими написано около десятка (число Application blocks менялось, сейчас в поставкe Enterprise Library их входит семь) блоков, решающих наиболее распространенные служебные задачи (конкрено - чуть позже), они распространяются бесплатно и постоянно совершенствуются при участии всего сообщества разработчиков, ориентированных на платформу Windows.

Теперь подробнее о составе, возможностях и версиях ...

В первой версии это был набор из восьми или девяти независимых блоков (было это несколько лет назад, так что точно уже не скажу). Впоследствии, во второй версии, их объединили в общую библиотеку (это удобно, так как часть блоков все равно пользуется услугами других блоков - например всем нужно обрабатывать ошибки или работать с конфигурационными файлами), причем несколько блоков в библиотеку не вошли. Почему - сказать трудно, я не использовал эти блоки в своих разработках, чтобы следить за их судьбой. Возможно их функциональность стала ненужной из-за новых возможностей, появившихся в Visual Studio 2005, возможно их посчитали слишком специфичными, чтобы включать в состав общей библиотеки, возможно эти блоки как раз готовятся включить в одну из следующих версий библиотеки - вы сами сможете это понять, разобравшись с описаниями блоков, ссылки на которые приведены ниже.

Итак, в данный момент существует Enterprice Library for .NET Framework 1.1 (последний релиз вышел в июне 2005 года), включающая в себя следующие application blocks:

  • Caching Application Block - позволяет использовать в приложениях кэшируемую коллекцию объектов, с большим количеством способов указывать время хранения объекта в кэше. Разработчики Web-приложений хорошо знакомы с аналогом этой коллекции -  объектом Cache из ASP.NET.
  • Configuration Application Block - позволяет считывать и записывать информацию в конфигурационные файлы.

  • Data Access Application Block - обеспечивает работу с базой данных. Этот блок работает с ADO.NET, скрывая от разработчика часть объектов, таких как Connection, Command, DataAdapter. В общем случае, из всех ADO.NET, объектов до которых вам удастся дотянуться, останутся лишь контейнеры, в которых вы получаете данные: DataSet и DataReader. Все остальное сделает за вас код, инкапсулированный в Data Access application block.
Прим:
Это действительно так, в свое время мне потребовалось внести небольшое изменение в существующий проект, не использующий application blocks. Подключать их ради одного исправления мне вовсе не хотелось, и я решил написать код вызова хранимой процедуры напрямую. Честное слово, мне пришлось просматривать это приложение, чтобы вспомнить, как создавать объект Command - это при том, что в то время я постоянно работал с SQL Server в других проектах - к хорошему быстро привыкаешь :)
  • Cryptography Application Block - предоставляет разработчикам поддержку шифрования и хеширования.

  • Exception Handling Application Block - позволяет разработчикам указывать правила, по которым будут обрабатываться возникающие исключения. Так, к примеру, вы можете указать, что исключения такого-то типа нужно оборачивать другим исключением и выбрасывать дальше, или наоборот, завершить его путешествие по стеку вызовов функций и опубликовать описание исключения при помощи одного(нескольких) доступных провайдеров публикаций: записать в текстовый файл, отправить по почте или сохранить в базе данных.

  • Security Application Block - поддержка задач, связанных с безопасностью приложения: аутентификация и авторизация пользователей, поддержка профилей пользователей и ролевой системы.

Кроме того, существует еще шесть application blocks, по разным причинам не включенных в Enterprise Library (в этом контексте уклончивое "по разным" значит не "я то конечно это знаю, но не хочу тратить время на столь очевидные объяснения", а всего лишь "у меня просто не хватило времени поинтересоваться этими причинами"). Поскольку с ними я не работал, то возможно не совсем точно смогу указать их назначение:

  • Asynchronous Invocation Application Block - если я правильно понял, может быть полезен в случае, когда данные для отображения запрашиваются у нескольких источников. Позволяет показать пользователю страницу еще до того, как будут получены ответы от каждого из источников, при этом части страницы на клиенте будут обновляться по мере получения ответов. Почему он не вошел в библиотеку? Возможно потому что в ASP.NET 2.0 уже появился клиентский диспетчер обратных вызовов, позволяющий страницам выполнять обратные вызовы сервера без полного возврата формы. Такие вызовы асинхронны и выполняются с использованием XML-HTML.

  • Aggregation Application Block - используется, когда нужно запросить данные у нескольких сервисов. В этом случае клиентское приложение направляет запрос Aggregation application block, тот опрашивет нужные сервисы и возвращает результат в виде одного XML документа (невнятно, но из краткого описания большего вытащить не удалось).

  • Composite UI Application Block - предназначен для создания сложных приложений на базе Windows Forms. Содержит решения по архитектуре и реализации, основанные на шаблонах, проверенных на широком спектре бизнес-приложений. Почему не вошел в Enterprise Library - понятно, еще в разработке. Он создавался  на основании .NET Framework beta 2.0 и сейчас существует только в виде Community Technical Preview. 

  • Smart Client Offline Application Block - упрощает создание smart client приложений. В Enterprise Library его не включили скорее всего потому, что он достаточно специфичен и необходим лишь самим smart client applications.

  • Updater Application Block - позволяет приложению следить за своими обновлениями, загружать их и автоматически обновляться. Возможно его не включили в Enterprise Libarary, потому что .NET 2.0 содержит более совершенное средство для поддержки обновлений - службу ClickOnce.

  • User Interface Process Application Block - упрощает разработку как Web так и Windows приложений. Судя по всему этот блок содержит достаточно много полезных возможностей, так как только для их описания понадобилось целых 134 страницы. Скорее всего в библиотеку не включен из-за своей тяжеловесности, это явно не та вещь, которую вы будете подключать ко всем прилжениям подряд.

И наконец, новинка сезона - следующая версия Enterprise Library. Она создается под .NET Framework 2.0 и существует сейчас только в виде Community Technology Preview. Эта версия уже доступна для скачивания и производит впечатление вполне стабильного продукта.

Прим:
Для того чтобы получить доступ к Enterprise Library for .NET Framework 2.0 Community Technology Preview, вы должны стать участником этого проекта на сайте GotDotNet.com. Для этого нужно зарегистрироваться, указав свой Microsoft Passport. После заполнения формы вы сразу же получаете доступ к библиотеке.

Функциональность блоков по сравнению с первой версией изменилась не сильно, зато внутреннее содержимое поменялось достаточно серьезно - большое количество кода было выброшено\изменено благодаря использованию новых возможностей, появившихся в .NET 2.0. Особенно сильно "похудел" Security application block - .NET Framework 2.0 содержит настолько много нововведений в этой области, что какое-то время стоял вопрос, стоит ли вобще оставлять этот блок или его можно безболезненно перевести в архив. Разработчики обещают выпустить Enterprise Library for .NET Framework 2.0 release в декабре этого года.

Ну вот, пожалуй на сегодня и все. Я надеюсь вы еще не решили, что с моей точки зрения программирование - это исключительно теория и обзоры? В следующем выпуске я постараюсь вас в этом разубедить :)

Удачи вам, приятных открытий и новых возможностей!


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.prgnotes
Архив рассылки
Отписаться
Вспомнить пароль

В избранное