(NET) NET (2002)

Как я осваивал .NET-framework.

На этой страничке я расскажу о первых впечатлениях от знакомства с .NET Framework.


Для начала меня поразили обьемы работ при изготовлении .NET Framework - если виртуальная машина VB6 имеет около 700 операций, то DotNetFix ставит в систему почти сто тысяч новых интерфейсов! Этого монстра делали 41 тысяча программистов, Билл Гейтс выплатил им 26 миллиардов долларов зарплаты, примерно размер годового бюджета России. И ожидается, что рентабельность вложения этих 26 миллиардов долларов будет самой высокой за всю историю Microsoft...


Здесь я выкладываю свою самую первую прогу на .NET Framework, написанную летом 2002 года. Для работы с этим сайтом мне понадобился Link_Cheker, который бы (пробегая по локальной файловой системе) проверял наличие всех файлов сайта и корректность ссылок. Нечто подобное есть во FrontPage - только я этим тупым монстром не пользуюсь - слишком уж загаживает он странички своими тегами.

Эта прога состоит примерно из 2700 строк кода и имеет рекурсивную структуру - сначала DIR1 обходит файловую систему в поисках всех файлов, чтобы потом зафиксировать недостижимые от входной страницы файлы, потом - RECURS работая от входной страницы сайта - проверяет корректность всех ссылок на сайте. SOKR - третья вложенная рекурсивная процедура - разбирает ссылки, чтобы правильно найти местоположение сайта в файловой системе относительно текущей страницы сайта.

При написании этой моей первой в жизни проги на NET возникли несколько неразрешимых проблем.


Но, сначала, о своих ощущениях, что поразило при запуске .NET Framework. В толстых и умных книгах вы такого не найдете. Там рассказывают о наследовании и полиморфизме (термины из обьектного программирования) - но я такими вещами на VB6 не пользовался и удивиться таким особенным способам создания новых классов на основе старых к сожалению не могу. (Этот кайф я вкусил намного позже). Зато могу сказать, что работая в Visual Inter Dev мне приходилось держать у себя на компеце FrontPage. Ибо в Visual Inter Dev нельзя было нарисовать табличку просто мышкой, и чтобы не возиться с пикселами, я выходил из Visual Inter Dev, рисовал таблички нужного размера во FrontPage, и забирал теги <TR> и <TD> с пикселами из FrontPage в Visual Inter Dev и продолжал работу. Честно говоря, меня страшно раздражала необходимость держать на своем компе такого жуткого и тупого монстра как FrontPage только из-за того, что он хорошо рисовал таблички мышкой (ну еще FrontPage умеет мгновенно обгадить какой-нибудь HTML-файл ненужными тегами). Теперь о нем можно уже никогда не вспоминать.

Но по настоящему при запуске я поразился увидев подсказку IntelleSense для тегов HTML. Как же мы могли столько лет мучаться без этого!
       
Неправильно введенный тег тут же подчеркивается (HTML компилируется в фоновом режиме) с выдачей сообщения:

Одной из самых противных особенностей таблиц стилей CSS было небольшое отличие имен атрибутов тегов HTML от имен параметров CSS. О, как это раздражало! И документация на CSS никогда ни к какой версии точно не соответствовала текущей версии HTML (которая очень лихо меняется от любого установленного ServecePack'a)... Все. Об этом кошмаре можно навсегда забыть. Что вы скажете на это:

Вообще редактор кода очень понравился. Понравился и XML-редактор и конструктор иконок. Особенно "схлопывание" ненужного кода. Вот скажем на этой форме у меня 94 контрола. А форма массшабируемая, значит их надо вручную позиционировать - это примерно 500 строк кода. Вот скажите, что в коде этой формы вообще можно понять после этого! Надо же еще события всех контролов обработать. И собственно, данные... Значит выход один - выносить хотя-бы позиционирование контролов во внешние модули. Но как это неудобно! Ведь доступ к каждому констролу будет теперь не по раннему связыванию, а по позднему - на этапе исполнения по ссылке FRM! Как можно было мучатся в шестерке и жить без "схлопывания" кода!

Хотя я убрал с компа многие вещи, которые теперь не нужны - типа редактора иконок - но для работы с XML все же оставил Exelon Studio - т.к. составить мапирование одного XML-документа на другой все равно нельзя. Жаль что редактор не умеет как в PrimalScripte отметить флажками все вхождения фрагмента во многих файлах - без этого работать очень неудобно.

Теперь пару слов о кошмарах, которые заставляли вздрагивать по ночам меня и других программистов на Visual Basic 6.0. Даже последние юзеры знают, что операционная система Windows состоит из примерно 6000 основных мелких функций, называемых API  (ну например, отрисовать на экране кнопку, открыть файл и т.д.). Непосредственно командами языка Visual Basic доступно 5-10% от возможностей Windows. А все остальное надо вызывать самому, непосредственно обращаясь к API. Так вот дело в том, что среди этих API почти не найдется функций с похожим интерфейсом. Одни возвращают HRESULT в результате ошибки, другие где-то заполняют какие-то поля, третьи генерируют системные исключения. Кроме того каждая функция принимала свои собственные параметры, некоторые двухбайтовые, некоторые 4-х байтовые, некоторые в кодировке ASCII, некоторые в UNICODE, некоторые требовали особого выравнивания... Для помощи программистам были созданы десятки различных подручных средств, например одно из них прямо входит в состав Visual Basic 6:

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

Так вот - теперь этому миру пришел конец. Все... Навсегда... Эти толстые книги могут теперь заинтересовать только букиниста или историка...

ДЛЯ ВСЕХ СРЕДСТВ WINDOWS ТЕПЕРЬ СОЗДАН ЕДИНЫЙ ИНТЕФЕЙС. Он называется .NET Framework. Правда на это потребовалось 26 миллиардов долларов. Думаю, что сбить коллектив в 41 тысячу человек и заставить их работать столько лет в едином порыве с такой безумной производительностью труда - это посложнее, чем создать космический корабль или атомную бомбу...

Вот попробуйте сравнить вот эту мою прогу, которой я читал реестр в VB6, с вот таким текстом. А ведь таких проблем решено - СТО ТЫСЯЧ!


Пространства имен NET не только перкрасно сруктурированы, но и выполнены ПРАКТИЧЕСКИ в открытом исходном коде, по крайней мере, MS не стала запускать механизм сокрытия исходного кода. А такие вещи, как доступ к данным, которые были раньше утоплены где-то в недрах ADO, теперь просто находятся непосредственно в исходном коде проекта.


Этот огромный (131 мегабайт в запакованном виде) пакет программ, сводящий к единому общему знаменателю порядок общения любых программ с Windows и называется .NET Framework SDK. Элементарным следствием наведенного наконец-то в windows порядка является то, что любую систему можно теперь писать на любых языках вперемешку - ведь все данные у них одинаковы и описаны в .NET Framework.

И наконец-то Windows (начиная от версий Windows .NET) стал нормальной комфортной средой программирования, а не просто скроенной наспех поделкой, который лепили побыстрее, из всех огрызков Unix'а, Win95, WinNT и еще черт знает из чего.

Третьим элементарным следствием наведенного порядка является возможность переделывать в будущем Windows на 64-разрядые аппаратные платформы, потом на 128-разрядные для Альфа-процессора и так далее - без переделки самих программ, пользующихся сервисами Windows (нарисовать на экране окошко, например) - достаточно в новых Windows'ах только поддерживать спецификацию интерфейсов .NET Framework.

В Microsoft заявляют и вовсе о фантастических проектах мирового господства, который они получат, распространив по миру .NET Framework. Например, о преобразователе интерфейсов .NET Framework - UNIX, тогда под любыми UNIX (FreeBSD, Linux, True64 и т.д.) можно будет свободно запускать Windows'ные программы и наоборот. Любопытно, что спецификация .NET Framework будет поддерживаться и в Windows CE - а этот меньший (бездисковый) брат Windows'а уже сейчас вставляется в виде чипа везде - от кассовых аппаратов до утюгов и холодильников.

Уже сейчас европейская комиссия ЕСМА рассматривает поданные Microsoft документы для придания интерфейсу .NET Framework статуса мирового стандарта. W3C собирается стандартизировать реализацию XML в .NET.

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

Эх, набраться бы терпения и рассказать вам про ужасы, которые мучают Web-программистов на ASP - про сохранения состояние, про возню с COOKIE, аутентификацию, про то, как на сервере не знаешь, что там делает клиент  - но про эти кошмары не получиться рассказать та же просто...

Но поверьте, проблемы Visual_ Вasic_программистов - это просто детский лепет по сравнению с проблемами ASP-программистов. И проблемы ASP-программистов были на самом первом месте при разработке .NET Framework. И эти проблемы решены с помощью .NET Framework просто безумно красиво - все эти супер-проблемы упрятаны глубоко внутрь Windows. При работе Internet Information Server тихонечко (через интрефейс ISAPI) подключаются необычайно умные библиотеки

и решают именно те проблемы, которые было так непосильно сложно решать ASP-программистам. И следующее поколение программистов просто не будет понимать - "какие же могут быть сложности при написании активных сайтов?"


Ведь в простом Visual Inter Dev это покажется просто чудом:
1.Берешь мышкой элемент управления. Кидаешь его форму. 


Смотрите, что получилось на HTML (Какой-то ASP:BUTTON) - а это и есть код для тех самых умных библиотек, о подключении которых говорилось выше.


2.И все. Волшебством этих библиотек обеспечивается чудо - на сервере теперь для этого обьекта BUTTON уже можно заполнять событие CLICK:

то-есть мы на сервере уже знаем, что лопух-юзер попал мышкой в кнопку, осталось только решить, что делать дальше...

Не только проблемы мирового господства Windows, наболевшие проблемы ASP-программистов и проблемы Visual Basic - программистов решает решает этот могучий пакет - .NET Framework. (А даже самая скромная документация по нему (из студии 7) составляет два компакт-диска - 1,2 Гигабайта. Сравните с Библией, она занимает запакованной 8 Мегабайт.) Этот пакет решает ТЫСЯЧИ самых наболевших проблем. Кроме перечисленных, я упомяну еще лишь еще о трех:


Помимо решения старых наболевших проблем, которые всех достали дОнельзя в VB6 и ASP меня удивило в .NET обилие новых терминов и идей. Удивил ADO.NET - странная технология обработки данных при закрытом коннекте к серверу. Хотя на VB6 и были клиентские курсоры - но до ТАКОГО абсурда там не доходило... С ADO.NET я знакомился отдельно - и свои впечатления о нем описал отдельно. Удивила связь с XML, зашитая в самое нутро ADO.NET - в обьект DataSet, удивила вообще возможность сериализации ЛЮБОГО ОБЬЕКТА в поток XML...Да и сами потоки в памяти - удивили...Как программиста, удивили просто десятки новых вещей - и вольное обращение с делегатами, обрабавывающими события, и всевозможные идеи модульного программирования типа отдельного описания интерфейсов, и наличие атрибутов - специальных классов, передаваемых компилятору и загрузчику...


И чтобы вас окочательно загрузить, скажу следующее : Бизнес-план Microsoft по супер-рентабельной окупаемости вложенных 26 миллиардов долларов составлен так, что ПОЧТИ ВЕСЬ .NET FRAMEWORK КТО-УГОДНО МОЖЕТ БЕСПЛАТНО ПОЛУЧИТЬ С САЙТА MICROSOFT. Это особенно поражает меня, ведь это Microsotf, самая богатая компания мира, образец деловой хватки и символ доведенной до предела жадности, и самое путное, что до последнего момента там можно было получить Бесплатно - крошечный и дефективный XML Notepad и дебильный XSLT Debugger... И вот теперь такой поворот - берите кто угодно бесплатно .NET Framework:

И еще нескольких замечаний:

Во-первых, бесплатно распространяется только .NET SDK - а это не сама Visual Studio 7, т.е. студию все-таки надо покупать. Для русских - это просто 7 пиратских дисков по 80 рублей на любом лотке, ну а американцу или немцу не один месяц придется отказывать себе во всем, чтобы накопить на такую покупочку. Что делать, ведь именно за их счет дядя Билли стал самым богатым человеком планеты и смог оплатить труд 41 тысячи лучших программистов мира... Если же нет даже 500 рублей на покупку пиратских дисков, то можно попробовать отсюда сгрузить 30-дневную Триал-версию...

Во-вторых, после установки .NET SDK - общий обьем системы примерно удвоится. А после установки студии даже в реестре добавится около 1500 обьектов. Соответственно, как ни крути, а работать все станет намного медленнее. По субьективному ощущению Visual Inter Dev просто летает по стравнению с седьмой студией. И не относитесь серьезно к утверждениям, что .NET Framework будет нормально работать на 256 мегабайтах памяти. У меня все это довольно прилично работает только начиная с процессора TUALATIN - 1,2 ГГЦ, с памятью 512 Mb.

И последний совет (бесценный, потому что нигде не описанный) . После установки студии или SDK - зайдите в каталог C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\StartSamples.htm, внимательно прочитайте инструкцию и выполните ее точно - с промежуточной перезагрузкой Windows - но об этом во второй экскурсии.

Даю также второй бесценный совет - сгрузите из вот этого места сайта Microsoft целых 101 штуку отличных примера на бейсике с описаниями на все случаи жизни! И учтите, это совсем не те примеры, которые идут в комплете со студей (startsamples.htm) и совсем не те примеры, которые идут с дисками MSDN!




Comments ( )
Link to this page: //www.vb-net.com/dotnet/tour0/index.htm
< THANKS ME>