В Visual Studio не было возможности строить отчеты, а точнее не было хорошего инструмента. Самое удивительное, что на эту нисшу долгое время никто серьезно не претендовал. Если в Delphi с ее маленьким рынком претендентов на стандарт можно не думая назвать два QuickReport и FastReport (не считая более мелких игроков), то здесь только очень дорогой Business Objects.
Я долго думал и решил бросить вызов самому себе - создать простую, но удобную систему отчетности для .NET. Пол года упорного труда и что я вижу? Microsoft внедряет отчетность в VS 2008 Standard. Она была там и раньше, но сторонняя, а тут похоже что своя. А ведь если MS решила создать систему отчетности, стоит ли в это ввязываться скромному программисту Мишке? Глупо и бессмысленно. Не то, что ничего не заработаю, я просто потеряю. Продолжать работать? Зачем, если ее даже смотреть не будут. Что смотреть, если есть готовое. Продвинуть продукт в таких условиях невероятно сложно.
Сегодня я продолжаю разговор о трех нововведениях, которые мне понравились в VS 2008. Не смотря на то, что я пока не рекомендую использовать Linq к базам (не запрещаю, а просто не могу рекомендовать, пока сам не увидел реальную выгоду), для доступа к XML эту выгоду я уже увидел и однозначно рекомендую к использованию.
Просто бомбовая новинка в VS - Linq. Что это такое? Это доступ к данным из кода, т.е. это что-то типа встроенного в .NET языка запросов SQL. Если в твоей голове возник вопрос - а зачем это нужно, то это значит, что ты недавно еще программируешь. Дело в том, что Linq умеет делать запросы не только к базам данных, но и к xml данным и даже к простым массивам. Ну разве не чудо? Представляешь, у тебя есть коллекция данных и ты без проблем пишешь к ней запросы на выборку!
Да что там говорить, вот тебе примерчик:
В Visual Studio 2008 появилось много интересного, в том числе и поддержка .NET 3.5. Сегодня я xотел бы выделить то, что понравилось мне больше всего.
Первое, что хочеться отметить - оператор var. С его помощью можно создавать переменные без явного указания типа данных. Некоторые программисты, услышав такое заявление, думают что Майкрософт добавила дыру, ибо все знают, что все мире должно быть типизировано, иначе неизвестно сколько нужно выделять памяти. Но .NET достаточно умный, чтобы определить ти данных по контексту инициализации.
Я начинаю изменять своему любимому Borland/Inprise/Code gears. Да, я работал с продуктами этой компании на протяжении 15 лет, не обращая внимания на передряги и всякие проблемы внутри компании. Но любовь похоже заканчивается и этому много причин:
1. Первая причина - это моя совесть. Угораздило же меня родиться с этой глупостью в организме. Да, среда разработки от борланда стоит очень дорого, и даже турбо вариант на данный момент мне не по карману. Это единственная программа, за которую готов отдать даже 10 000 р. Если бы они у меня были, но к сожалению...
Компонент PropertyGrid позволяет отображать свойства класса в виде сетки, как это делает окно Properties в самой среде разработки. Чтобы компонент отобразил свойства нужного вам класса, просто присвойте этот класс свойству SelectedObject. Например, следующая строка заставит отобразить свойства кнопки Button1:
propertyGrid.SelectedObject = Button1;
Давайте представим, что нам нужно использовать PropertyGrid для отображения нужного нам набора значений. Как это сделать? Да очень просто – можно все эти свойства объединить в отдельный класс и использовать его, как любой другой стандартный класс из .NET Framework. Только чтобы свойства выглядели красиво, их нужно правильно оформить при описании класса.
Давайте напишем пример, в котором на главном окне будет только компонент PropertyGrid, где должны отображаться свойства программы потенциального приложений. Все свойства будут объединены в отдельном классе PropertiesClass, это очень удобно, красиво и будет соответствовать всем принципам ООП. Давайте рассмотрим, как правильно и красиво оформить класс, возможно, вы узнаете что-то новое из жизни .NET.
Существует множество методов сортировки в зависимости от скорости работы и сложности реализации. Самый простой, который приходит в голову большинству начинающих программистов - создать новый массив и в цикле искать наименьшим значения в основном массиве с переносом их в новый. Найдя первое наименьшее значение, начинают искать следующее, и так пока весь цикл не будет перенесен. Страшное дело, ведь алгоритм ест память, выполняется долго, а если массив уже отсортирован, то тратится тонна времени абсолютно впустую.
Недавно я увидел подобный код у опытного программиста, который хорошо знает базы данных и прекрасно решает производственные задачи. На вопрос: "А почему так", он сказал, что сложное придумывать лень а это реализовать очень просто.
Не секрет, что достаточно большая часть ответственности за безопасность кода лежит на функциях, особенно это относится к С/С++, где повсеместно используются строки, заканчиваются нулем. Это не только самый большой тормоз, но и самый дырявый тип данных. Второй источник проблем безопасности - нарушение логики или ошибки проектирования. Что страшнее? Я не берусь ответить на этот вопрос однозначно, хотя мне кажется, что вторая проблема опасноснее, потому что ее сложнее вычеслить.
Я затеял этот разговор не ради того, чтоб определить, что страшнее, а чтобы задуматься, почему мы не решаем проблемы безопасности и как это можно сделать.
Определить ошибки в логике очень сложно, а в большинстве случаев сделать это может только человек. Автоматизировать поиск можно, но только простейших просчетов типа не проинициализированной переменной. Все переменные должны иметь начальное значение, и эту проверку может, должен и умеют делать компиляторы. Что-то более сложное доверить компьютеру невозможно, потому что это человеческая логика пока не описывается машинным языком.