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

Читать, слущать книги онлайн бесплатно!

Электронная Литература.

Бесплатная онлайн библиотека.

Читать: Дефрагментация мозга. Софтостроение изнутри - Сергей Тарасов на бесплатной онлайн библиотеке Э-Лит


Помоги проекту - поделись книгой:

...

Новоиспечённый инженер после пяти лет обучения, имеющий базовые знания Java, XML и UML, после своего прихода на предприятие и перед началом работы был привлечён в понедельник к чтению публичного отчёта по J2EE v1.4 на 228 страницах.

На шести первых страницах этого отчёта значились ссылки на EJB, JSP, JMS, JMX, JCA, JAAS, JAXP, JDBC, JNDI. Эта новая версия J2EE и веб-служб предполагала знание концепций SOAP, SAAJ, JAX-RPC и JAXR. Каждый из этих акронимов имеет соответствующую специ фикацию.

Спецификация EJB 2.1 – это документ PDF на 640 страницах, который будет прочтён во вторник. Среда будет посвящена чтению документации по сервлетам Servlet 2.4 на 307 страницах. В четверг он штурмует документ по JSP 2.0 на 374 страницах. И так далее. .

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

Я добавил бы, что указанные в статье оценки как временных рамок, так и продуктивности работы излишне оптимистичны. Но вернёмся к CORBA.

Из небольшого списка известных в тот период открытых реализаций (Orba-cus, MICO, Robin) нами в продукте использовался omniORB. В комплекте к третьей версии выпуска 2000 года шла единственная реализованная служба именования (COS naming services) и библиотека синхронизации потоков – минимум, чтобы просто запустить разработку «с нуля». Впрочем, небольшой команде стартапа этого вполне хватило.

В начале 2000-х в ИТ-отрасли разразился кризис лопнувшего пузыря интернет-компаний, продвигать сложные и дорогие инфраструктуры, а коммерческие реализации CORBA стоили порядка тысячи долларов за рабочее место, стало очень трудно. Постепенно из кустов начали выкатывать на сцену рояль веб-сервисов, который из-за проблем с CORBA должен был стать новой платформой интеграции служб и приложений в гетерогенной среде. Концепции быстро придумали многообещающее название СОА. Надо сказать, что рояль не стоял без дела и в кустах: разработка веб-служб и развитие XML велись в конце 1990-х и активно продолжились в 2000-х годах. Поскольку это была технология, хотя и весьма базового уровня, но относительно простая, дешёвая и открытая не только на уровне спецификаций, но и в виде множества реализаций.

Говоря о базовом уровне технологии, я имею в виду не столько отсутствие сравнимой с CORBA функциональности и номенклатуры служб и средств [80] , сколько необходимость программистам самим надстраивать над этим базисом многое из того, что было даже в самом минимальном варианте CORBA.

Веб, точнее, его основа, HTTP – среда без состояния и пользовательских сессий. В общедоступном Интернете такое решение было вызвано соображениями нагрузки, поскольку максимальное число запросов к серверу теоретически равно количеству всех устройств в сети. В корпоративной же системе нагрузку на службу можно (и нужно) рассчитать гораздо точнее. В итоге программистам, не связанным с веб-разработкой для Интернета, приходится восполнять недостаток средств протокола надстройками поверх него костылей, например, постоянно гоняя контекст и состояние в сообщениях или симулируя сессии по тайм-ауту.

В CORBA сессии поддерживались средой без дополнительных усилий. Если в частных случаях возникали вопросы нагрузки на поддержку соединений при большом количестве клиентов, они решались так же просто, как и в среде СУБД: приложение самостоятельно отсоединялось от сервера, выполнив пакет необходимых запросов. При желании нетрудно было также организовать и принудительное отсоединение по истечении заданного периода пассивности. Но для корпоративной службы, напомню, речь идёт обычно о десятках и сотнях активных сессий, поддержка которых в большинстве случаев укладывается в ресурсы серверов.

Неприятным следствием отсутствия сессий стала невозможность поддержки транзакций при работе с веб-службами. Для решения проблемы в рамках ООП необходим шаблон «Единица работы» ( unit of work ), суть которого в передаче веб-службе сразу всего упорядоченного множества объектов, подлежащих сохранению в управляемой сервером транзакции.

В общем случае шаблон является аналогом пакетной обработки транзакций, необходимой для сокращения времени жизни единичной транзакции. Например, в репликации данных между СУБД сиквел-операции передаются пачками. Но если раньше такой подход был разновидностью оптимизации и средством избавления от толстых транзакций, то теперь его необходимо было использовать всегда, вместо любой транзакции вообще.

Давайте сравним близкий к реальному псевдокод на сторонах клиента в рамках CORBA с псевдокодом в среде веб-служб. При поддержке сессии все достаточно прозрачно и не нуждается в комментариях.

Псевдокод транзакции в среде CORBA

CosTransactions.Current current = CosTransactions.CurrentHelper.Narrow(

orb.ResolveInitialReferences("TransactionCurrent"));

current.Begin();

try

{

store1.Remove(product, quantity);

store2.Append(product, quantity);

current.Commit();

}

catch (Exception e)

{

current.Rollback();

ShowError("Ошибка выполнения операции: " + e.toString());

}

В среде веб-служб в программе-клиенте приходится надстраивать абстракции DTO [81] . А в серверном приложении, где используются соединения, например, с СУБД или монитором транзакций, необходимо фактически дублировать предыдущий код с раскруткой объекта – единицы работы (unit of work) в реальную транзакцию.

Псевдокод транзакции в среде веб-служб

StoreServiceClient storeServiceClient = new StoreServiceClient(url);

StoreOperationDTO operation1 = storeServiceClient.CreateOperation(store1.Id);

operation1.Type = StoreOperations.Remove;

operation1.ProductId = product.Id;

operation1.Quantity = quantity;

StoreOperationDTO operation2 = storeServiceClient.CreateOperation(store2.Id);

operation2.Type = StoreOperations.Append;

operation2.ProductId = product.Id;

operation2.Quantity = quantity;

UnitOfWork uow = new UnitOfWork();

uof.RegisterDirty(operation1);

uof.RegisterDirty(operation2);

try

{

storeServiceClient.ProcessOperations(uow);

}

catch (Exception e)

{

ShowError("Ошибка выполнения операции: " + e.toString());

}

Вторым «упрощением» стал переход от понятных прикладному программисту деклараций интерфейсов объектов и служб на языке IDL [82] к WSDL [83] – описаниям, ориентированным, прежде всего, на обработку компьютером. Сравним декларации складской службы, возвращающей по запросу текущее количество товарных позиций.

Декларация службы в CORBA IDL

module StockServices

{

typedef float CurrentQuantity;

struct QuantityRequest

{

string stockSymbol;

};

interface StockInventoryService

{

CurrentQuantity getCurrent(in QuantityRequest request);

};

};

Декларация службы в WSDL

<?xml version ="1.0" encoding ="utf-8"?>

<definitions name ="StockInventoryService"

xmlns: sqs ="http://mycompany.com/stockinventoryservice.wsdl"

xmlns: sqsxsd ="http://mycompany.com/stockinventoryservice.xsd"

xmlns: soap ="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns: wsdl ="http://schemas.xmlsoap.org/wsdl/"

xmlns: xsd ="http://www.w3.org/2000/10/XMLSchema">

<wsdname = "note" types>

<xsd: element name ="CurrentQuantity">

<xsd: complexType>

<xsd: all>

<xsd: element name ="stockSymbol" type ="string"/>

</xsd: all>

</xsd: complexType>

</xsd: element>

<xsd: element name ="CurrentQuantity">

<xsd: complexType>

<xsd: all>

<xsd: element name ="quantity" type ="float"/>

</xsd: all>

</xsd: complexType>

</xsd: element>

</wsdname = "note" types>

<xsd: element name ="CurrentQuantity">

<xsd: complexType>

<xsd: all>

<xsd: element name ="quantity" type ="float"/>

</xsd: all>

</xsd: complexType>

</xsd: element>

</wsdname = "note" types>

<wsdname = "note" message name ="getCurrentInput">

<wsdname = "note" part name ="body" element ="sqsxsd: CurrentQuantity"/>

</wsdname = "note" message>

<wsdname = "note" message name ="getCurrentOutput">

<wsdname = "note" part name ="body" element ="sqsxsd: CurrentQuantity"/>

</wsdname = "note" message>

<wsdname = "note" portType name ="StockInventoryServicePortType">

<wsdname = "note" operation name ="getCurrent">

<wsdname = "note" input message ="sqs: getCurrentInput"/>

<wsdname = "note" output message ="sqs: getCurrentOutput"/>

</wsdname = "note" operation>

</wsdname = "note" portType>

<wsdname = "note" binding name ="StockInventoryServiceSoapBinding"

type ="sqs: StockInventoryServicePortType">

<soap: binding style ="document" transport ="http://schemas.xmlsoap.org/soap/http"/>

<wsdname = "note" operation name ="getCurrent">

<soap: operation soapAction ="http://mycompany.com/getCurrent"/>

<wsdname = "note" input>

<soap: body use ="literal"/>

</wsdname = "note" input>

<wsdname = "note" output>

<soap: body use ="literal"/>

</wsdname = "note" output>

</wsdname = "note" operation>

</wsdname = "note" binding>

<wsdname = "note" service name ="StockInventoryService">

<wsdname = "note" port name ="StockInventoryServicePort"

binding ="sqs: StockInventoryServiceBinding">

<soap: address location ="http://mycompany.com/StockInventoryService"/>

</wsdname = "note" port>

</wsdname = "note" service>

</definitions>

Третьим «усовершенствованием» стал отказ от автоматической подгрузки связанных объектов [84] в пользу исключительно ручного управления процессом.

В CORBA объекты функционируют на сервере, тогда как на клиенте находится только соответствующая заглушка ( stub ). То есть вы в программе вызываете какой-то метод, а на самом деле происходит обращение к серверу, вызов соответствующего метода у серверного объекта и возврат результата на клиента с возможным обновлением состояния локальных полей заглушки. Аналогично со свойствами объектного типа: связанный объект подгружается по мере необходимости. Всё это происходит прозрачно для программиста, которому не нужно вмешиваться в процесс взаимодействия, но желательно знать, что стоит за манипуляциями с заглушкой на клиенте. Соответственно, существует соблазн вместо реализации на сервере новой функции службы написать код непосредственно на клиенте, благо сделать это легко. Тогда, например, обработка достаточно большой коллекции объектов в цикле может вызвать интенсивный обмен сообщениями с сервером и возникновение узкого места в системе. Аналогичная проблема плохой реализации имеется и при работе приложения напрямую с СУБД.

В среде веб-сервисов вопрос с «нерадивым программистом» решили радикально – отменой самой возможности написать такой код. Несмотря на то что в 80 % случаев имевшаяся автоматическая загрузка была уместной и здорово сокращала программу.

Как уберечь кукурузу от насекомых-вредителей? Очень просто: выкосить её всю, к чертям. Вредители придут, а кушать нечего.

Возвращаемые веб-службами объекты не связаны с серверными за их отсутствием. Потому что у серверной части приложения нет состояния и, соответственно, не может быть никаких объектов в принципе. Обмен сообщениями происходит как и в обычной веб-среде: запрос – ответ без поддержки сессии. Общеупотребительная практика – использование DTO для передачи состояния объектов от клиента к серверу и обратно. Но DTO не содержит никаких ссылок на другие объекты, кроме вложенных. Его структура состоит из полей скалярных типов, разрешённых стандартом, вложенных объектов и массивов. Соответственно, вы не можете прозрачным образом динамически подгрузить недостающий объект, для чего придётся явным образом вызывать службу.

Прозрачная загрузка объектов в клиентском CORBA-приложении

BookGroup group = catalog.getBookCategory("Программирование");

Book[] books = group.getItems(); // один вызов сервера

foreach(Book book in books)

{

ShowInfo(book.Name +": ");

ShowInfo(book.getPopularity(). getVotesCount()); // два вызова

}

Работа клиентского приложения с DTO в среде веб-служб

BookGroupServiceClient groupClient = new BookGroupServiceClient(url1);

BookGroupDTO group = groupClient.GetBookCategory("Программирование");

BookServiceClient bookClient = new BookServiceClient(url2);

BookDTO[] books = bookClient.GetByGroupId(group.Id);

foreach(BookDTO book in books)

{

PopularityServiceClient popularityClient = new PopularityServiceClient(url3);

PopularityDTO popularity = popularityClient.GetByBookId(book.Id);

int votesCount = popularityClient.GetVotesCount(popularity.Id);

ShowInfo(book.Name +": ");

ShowInfo(votesCount);

}

Сила CORBA проявляется в том, что технология может работать и как в приведённых примерах, то есть с реализацией элементов полноценного многопоточного сервера приложений, и аналогично веб-службам, обрабатывая в сервисах объявленные в интерфейсах структуры, напоминающие DTO. Вне контекста «автоматизированного бардака» [85] современные заявления о том, что СОА не оправдала возложенных на неё надежд, свидетельствуют о том, что и выбранная для неё модель веб-служб не стала решением проблем взаимодействия приложений в корпоративной среде. Ожидает ли нас новое пришествие CORBA в виде облегчённой её версии – покажет время. Поищите в Интернете по ключевым словам Web ORB – обнаружите немало интересного.

Прогресс неотвратим

Войны не будет, но будет такая борьба за мир,

что камня на камне не останется!

Из анекдота времён холодной войны

Вы думаете, что большие ЭВМ вымерли или вымирают? Попытаюсь вас если не разубедить, то хотя бы проинформировать.

...

В 2011 году 93 % респондентов крупных компаний отметили, что интенсивность использования мейнфреймов в их деятельности увеличивается или, как минимум, стабильна, и они остаются критически важной платформой для ЦОДов и «облачных» систем. 62 % (в 2010-м таковых было 56 %) отмечают общий рост данного рынка, 47 % полагают, что его развитие хорошо стимулируется новыми задачами и новым программным обеспечением [86] .

Две трети опрошенных отводят мейнфреймам стратегическую роль, которая только увеличивается; 42 % отмечают особую важность мейнфреймов для облачных приложений, а 65 % даже намерены внедрять в управление этими машинами мобильный подход [87] .

Согласно данным IDC по региону EMEA, в классе решений high-end (системы ценой $250 тыс. и выше) мейнфреймы опережают другие платформы non-x86, имея по результатам 2011 года долю рынка 45 % в стоимостном выражении. При этом в данном регионе и в данном классе серверов средняя цена RISC-сервера – 580 тыс. долл., EPIC-сервера – 830 тыс. долл., мейнфрейма – 2,1 млн долл. Чем выше требования к производительности и защищенности системы (и цена, которую согласны платить за это заказчики), тем чаще выбор делается в пользу мейнфрейма… Если взять одну из наиболее мощных экономик Западной Европы – Германию, то там в 2011-м на рынке систем non-x86 класса high-end доля мейнфреймов в количестве поставленных систем составляла 33 %, а в денежном выражении – 66 %.

Такие цифры должны впечатлять, особенно на фоне демонтированных в 1990-х годах на драгметаллы советских ЭВМ. Безукоризненно проведённая операция по зачистке национального рынка с последующим его заполнением экспортной продукцией самого низкого ценового сегмента – серверами и ПК на базе x86.

Наиболее ходовым термином в софтостроении является «новые технологии». По умолчанию новые технологии олицетворяют прогресс. Но всегда ли это так? Даже если не всегда, то в условиях квазимонополий, поделивших рынки корпораций, отказаться от «новых» технологий рядовым разработчикам непросто, особенно работающим в сфере обслуживания под руководством менеджеров среднего звена с далёким от технического образованием, оперирующих понятиями освоения и расширения бюджета и массовости рынка специалистов, а не технологической эффективностью.

Произошла тихая революция. Ещё 15–20 лет назад сессии крупных поставщиков на конференциях разработчиков были своеобразным мастер-классом, где на бета-стадии испытывалась реакция аудитории на предлагаемые изменения. Сегодня повестка дня состоит в постановке перед фактом новой версии платформы, показе новых «фишек» и оглашении списка технологий, которые больше не будут развиваться, а то и поддерживаться. Действительно, солдаты от софтостроения не должны рассуждать. Они несут службу и должны молча овладевать оружием, закупкой которого занимаются генералы в непрозрачном договоре с поставщиками. Экономика потребления обязана крутиться, даже если в ней перемалываются миллиардные бюджеты бесполезных трат на модернизацию, переделку и переобучение.

NET

Цифры версий и релизов фреймворка. NET меняются со скоростью, заметно превышающей сроки отдачи от освоения и внедрения технологий. В качестве положительного момента отмечу тот факт, что можно перескочить со второй версии сразу на четвёртую, минуя третью и третью с половиной. Правда, уже анонсирована пятая.

Давайте подумаем, кто же выигрывает в этой гонке кроме самой корпорации, пользующейся своим квазимонопольным положением:

•  Услуги по сертификации. Прямая выгода.

•  Консультанты и преподаватели курсов. Сочетание прямой выгоды с некоторыми убытками за счёт переобучения и очередной сертификации.

•  Программисты в целом. Состояние неопределённости. Выбор стоит между «изучать новые возможности» и «решать задачи заказчиков». А если изучать, то как не ошибиться с перспективой оказаться у разбитого корыта через пару лет.

•  Разработчики в заказных проектах. Прямые убытки. За пару лет получен опыт работы с технологиями, признанными в новом фреймворке наследуемыми, то есть не подлежащими развитию, хорошо, если поддерживаемыми на уровне исправления критичных ошибок. А ведь всего 2–3 года назад поставщик убеждал, что эти технологии являются перспективными, важными, стратегическими и т. п. Необходимы новые инвестиции в обучение персонала и преодоление появившихся рисков.

•  Разработчики продуктов. Косвенные убытки. В предлагаемом рынку продукте важна функциональность и последующая стоимость владения. На чём он написан – личное дело компании-разработчика. Тем не менее заброшенную поставщиком технологию придётся развивать за свой счёт или мигрировать на новую. Скорее второе: в 2012 году по прежнему работает приложение 15-летней давности, использующее DDE [88] , тогда как совместимость OLE Automation между версиями Office не гарантирована.

Риторически, подобно герою кинокомедии, можно вопрошать: «Минуточку, за чей счёт этот банкет?» И ответ будет аналогичный оригинальному, подвергшемуся цензуре в фильме.

Софтостроителю должно быть понятно, что менять технологии и концепции рискованно, потому что новые ещё сырые, а брошенные или отодвинутые на второй план «старые» так и не успели достичь зрелости. 2–3 года – минимальный срок для появления первых промышленно работающих систем и, соответственно, специалистов по их разработке. A не специалистов по чтению обновлённой версии MSDN и книжек по учебным курсам. Поэтому нормальный цикл концептуальных изменений 5–7, а то и 10 лет.

Вынужденный совет в такой ситуации дают авторы книги «Прагматичный программист» (Pragmatic Programmer), в буквальном переводе «Не кладите все свои технические яйца в одну корзину» [89] .

Office 2007

Как известно, Microsoft изменила интерфейс в Office 2007. Вместо привычных меню появились многочисленные закладки лент панелей инструментов с крупными пиктограммами. По словам Microsoft, это сделано для облегчения работы начинающим пользователям.

Хорошо, возможно, начинающим жить в офисном пакете это полезно или безразлично. А мы, давние пользователи, заканчиваем в нём жить, что ли? Кроме проблем с интерфейсом возникли проблемы открытия файлов в Office 2003. Повторилась ситуация с версией Office 97, когда Microsoft пришлось в срочном порядке выпускать конвертер для Office 95, позволяющий открывать в нём файлы новых форматов.

Разве трудно было предусмотреть возможность выбора между старым и новым интерфейсом, как это было сделано в Windows XP и 7? Зато всего за 30 долларов вам предложат купить программку третьей фирмы Classic Menu, которая возвратит старый интерфейс. Остап Бендер со своими относительно честными способами отъёма денег у населения мог бы гордиться последователями.

Крупные корпорации не спешили с обновлениями, соблюдая внутренние стандарты. В рамках одного проекта в 2010 году пришлось объяснять заказчикам, что модуль Excel 2003 для работы с OLAP-кубами, тоже от Microsoft, внезапно был удалён с их веб-сайта, и сходную функциональность официальным путём теперь можно получить только в версиях 2007 и 2010.

Итогом истории для меня стал переход на Libre Office, где редактировалась в том числе и эта книга.

SQL Server

Несмотря на предвзято позитивное отношение к этому продукту Microsoft, используемому мною с 1996 года, вынужден отметить, что и здесь, начиная с 2005-й версии, наряду с полезными нововведениями проявилась определённая деградация.

Изменилась концепция пользовательского интерфейса. В версиях 7 и 2000 интегрированные приложения администратора (Enterprise Manager) и разработчика (Query Analyser) были разделены (в 6.х разделение тоже было, но неявное). В 2005 году корпорация решила унифицировать подход и свести всё в одну среду разработки и администрирования. Приложения переписали на. NET, благодаря чему они стали работать медленнее. В процессе переделки разработчики забыли, видимо, в спешке прихватить разные полезные мелочи, вроде множественного выделения объектов в дереве, которые за предыдущие годы были воплощены в версии 2000. Что, например, вы ожидаете увидеть, щелкнув мышью дважды на хранимой процедуре в правом окошке проводника объектов? Правильно, её текст. Но тут вас постигнет разочарование, мы проваливаемся в список параметров.

Если в версии 2000 пошаговая трассировка хранимых процедур и триггеров из консоли Query Analyser была доступна, то в 2005 она исчезла, а программистам порекомендовали дополнительно покупать Visual Studio соответствующей редакции. Хочется надеяться, что победил здравый смысл, а не поток жалоб, и в 2008 году отладка вновь появилась в основном инструментарии.

Поставляемая вместе с продуктом часть Visual Studio, видимая пользователю как BIDS (Business Intelligence Developer Studio), привязана к версии СУБД: OLAP-проекты, отчёты и пакеты ETL [90] для SQL Server 2005 могут разрабатываться только в BIDS 2005. А в BIDS 2008 уже не могут, потеряна обратная совместимость.

При этом многие полезные функции в 2005-й версии были всё ещё сырые. Например, OPENQUERY(), не допускающая конкатенации строк в параметрах, вынуждала писать трудносопровождаемый код внутри строковых переменных. Или новоиспечённая ROW_NUMBER(), не решающая, а создающая проблемы постраничной выборки на относительно больших объёмах. Исправляющая положение инструкция ORDER BY OFFSET появилась только в версии 2012. Форматы резервных копий между SQL Server 2008 и 2008 R2 оказались несовместимы.

Со средствами сетевого доступа к серверу баз данных и вовсе вышла смешная история.

В версии SQL Server 6.5, которая была ещё «почти Sybase 11», родным интерфейсом доступа к СУБД являлась DB-library в виде DLL и статической библиотеки С/C++, а драйвер ODBC [91] шёл как стандартное дополнение. После выпуска полностью переписанной на уровне ядра версии SQL Server 7 в 1998 году Microsoft анонсировала отказ от DB-library в пользу OLE DB, утверждая, что именно он и будет теперь «родным» для СУБД. Сама постановка фразы о том, что универсальный интерфейс, работающий через COM, может быть одновременно «родным», вызвала в сообществе разработчиков недоумение.

Поддержка DB-library была прекращена, в SQL Server 2000 эта библиотека ещё присутствует, но уже работает поверх (!) OLE DB. Библиотека С/C++ поверх COM – яркий пример костыля, подпирающего этаж совместимости. Имевший специфичные расширения ODBC-драйвер был сделан «с нуля», он самостоятельно реализовывал протокол TDS [92] доступа поверх сетевого уровня IP-сокетов и являлся высокопроизводительным и автономным, то есть не требовал установки дополнительных «родных» DLL. SQL QueryAnalyser в версии 2000 и, позднее, SQL Server Management Studio используют ODBC для управления запросами.

Одновременная поддержка OLE DB и ODBC в синхронном функциональном состоянии требовала затрат, которые в 2012 году решили сократить. Microsoft анонсировала отказ от OLE DB в пользу ODBC для работы с SQL Server.

Оказалось, что «родной» интерфейс всё-таки не родной. «Родного» у SQL Server просто нет, но есть ODBC, который теперь объявлен «родным», и SQLClient для. NET. Могли ли в 1995 году немногочисленные разработчики, выбравшие тогда ODBC, предполагать, что к 2012 году они окажутся в числе выигравших?

Vista

Windows 7 ещё находилась в состоянии «кандидат к выпуску», а представители Microsoft открытым текстом стали предлагать отказаться от покупки своего флагманского на тот момент продукта – операционной системы Windows Vista и подождать выхода новой версии.

По сути пользователям сообщили, что мы достаточно потренировались на вас и за ваши же деньги, а теперь давайте перейдём собственно к делу. Судьба Vista была решена – система фактически выброшена в мусорную корзину, так и не успев занять сколь-нибудь значительную долю парка «персоналок» и ноутбуков. Производителям железа была дана отмашка переключиться на Windows 7, корпоративным службам ИТ пришлось в срочном порядке сворачивать проекты по переходу на Vista и ориентироваться на «семёрку».

Не скрою, я изначально был скептически настроен к Vista, вышедшей в конце ноября 2006 года, по двум причинам. Во-первых, ничего существенного по сравнению с Windows XP она не привносила, а во-вторых, первый пакет обновлений, после которого обычно можно начинать работу с продуктами Microsoft, задержали более чем на год, до марта 2008 года. Такие повороты неприятны не тем, что за ними обычно скрывается некий тайный смысл и прочая конспирология, а тем, что, судя по заявлениям для публики, стоит за всем этим нескоординированная работа разных служб и сумбурная техническая политика последних лет.

Интересно также, что Билл Гейтс и Стив Балмер в конце 2000-х годов начали активно продавать свои доли в бизнесе Microsoft.

О материальном

И немного о материальном, про оборудование. Периферия. Широко распространено мнение о том, что Linux на порядок хуже чем Windows поддерживает всякие периферийные устройства. Однако это не совсем так.

Если брать 32-разрядные версии Windows, то, действительно, нетрудно найти драйвер даже к довольно старому устройству. Но Microsoft уходит с 32-

разрядных платформ на десктопах и ноутбуках, навязывая предустановленные 64-разрядные версии своих операционных систем. Некоторые приложения всё чаще требуют 64-разрядной среды, например, для обработки больших объёмов данных или видео высокой чёткости.

Тут-то и выясняется, что по уровню поддержки периферии 64-разрядные Windows отрезают вам путь к использованию ещё совсем нестарых устройств. Если у вас в доме или на работе имеется оборудование 2–3-летней давности, то с большой вероятностью найти драйверы даже под Vista x64 вам не удастся. Не говоря уже о Windows 7. Единственный доступный выход – виртуальная машина с Windows XP.

А что же в Linux? Если оборудование поддерживалось в предыдущих версиях таких распространённых дистрибутивов, как Ubuntu или Mint, то независимо от разрядности новых версий системы оно будет продолжать поддерживаться и в них после обновления. Сканером и лазерным принтер я пользуюсь уже более пяти лет, сначала в 32-битной Windows XP, установив драйверы из комплекта, а затем под 64-разрядными Ubuntu и Mint из дистрибутива, не требующими установки драйверов вообще. Чего и вам желаю.

Проектирование и процессы

«La perfection est atteinte, non pas lorsqu\'il n\'y a plus rien а ajouter, mais lorsqu\'il n\'y a plus rien а retirer». (Совершенство достигается не тогда, когда нечего добавить, а тогда, когда нечего убрать.)

Антуан де Сент-Экзюпери

Корпоративные информационные системы (КИС) прошли долгий путь от полной закрытости сплавленных с аппаратурой монолитов до создания модульных и открытых систем. Однако теперь вместо стандартизации процессов и реализации лучших практик создания базовой функциональности на передний план выходят конкурентные преимущества за счёт дифференциации и специализации. Прежде всего, за счёт обрастания «скелета» КИС «мышцами и кожей» специфичных для данного предприятия программ.

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

Краткий словарь для начинающего проектировщика

Основная задача проектировщика – поиск простоты. Очень просто делать сложно, но очень сложно сделать просто. Начинающий проектировщик осознает это сам со временем, а пока нужно учиться элементарным понятиям для понимания, что же хотел сказать коллега по проекту на самом деле.

• «Это был плохой дизайн». Это спроектировано не мной.

• «By design» (так спроектировано). Ошибка проектирования, стоимость исправления которой уже сравнима с переделкой части системы.

• «Это не ошибка, а особенность ( not a bug but a feature )». Прямое следствие из « by design ».

• «Это может ухудшить производительность». Не знаю и знать не хочу ваши альтернативные решения.

• «Нормализация не догма». Потом разберёмся с этими базами данных, когда время будет.

• «Это наследуемый модуль». Этот кусок со многими неявными зависимостями проектировали достаточно давно, скорее всего стажёры.

• «Постановка задачи тоже сложна». Ума не приложу, откуда возникли эти десятки тысяч строк спагетти-кода.

• «Сроки очень сжатые». Мы давно забили болт на проектирование.

• «Наши модульные тесты покрывают почти 100 % кода». А функциональными тестами пусть занимается заказчик.

• «В нашей системе много компонентов». Установку и развёртывание системы могут сделать только сами разработчики.

Слоистость и уровни

Разбираться в слоях и уровнях должны не только разработчики КИС, то есть «скелета», но и те программисты, которые будут наращивать на него свои приложения. Иначе велик риск ненароком прилепить бицепс вместо ягодичных мышц или наоборот.

Определение автоматизированной информационной системы (АИС) складывается из трёх основных её компонентов: людей, информации и компьютеров. Любая АИС – это люди, использующие информационную технологию средствами автоматизации [9]. И КИС не исключение.

В публикациях по софтостроению часто используются понятия слоёв и уровней программной системы. В англоязычной среде соответствующие термины —

layer и level . На физическом уровне реализующий слой компонент системы называется звеном – tier . Чтобы не запутаться в употреблении терминологии, нам следует чуть подробнее вглядеться во внутреннее устройство АИС.

Любая автоматизированная информационная система может быть рассмотрена с трёх точек зрения проектировщика:

• концептуальное устройство [93] ;

• логическое устройство;

• физическое устройство.

Концептуальное устройство

Концептуальное устройство АИС составляют всего три слоя.



Поделиться книгой:

На главную
Назад