Category: архитектура

Category was added automatically. Read all entries about "архитектура".

Микрософт, что же ты делаешь, прекрати

Два дня долблюсь в WCF, чтобы понять, как сунуть в RESTful сервис всякие хитрые способы аутентификации - примерно в стиле "проверяем откуда пришел запрос, проверяем хидеры-куки-итд, и либо аутентифицируем по ним, либо инициируем digest или ntlm аутентификацию".
Вывод, который я сделал пару лет назад насчет WCF, не изменился - over-engineered индусятина, с безумной архитектурой и безумным кодом (вплоть до полной бессмыслицы).
При этом, внезапно, микрософт сделал deprecated WCF REST starter kit, в котором был перехват запросов на уровне канала, до превращения их в Message. Сейчас из подходящего остались IDispatchMessageInspector, но там толком нельзя сделать что-то вроде "проверить запрос и не пустить сообщение дальше, а вернуть 401".
И микрософт выкатила еще одно творчество на эту тему - ASP.NET Web API: http://msdn.microsoft.com/en-us/library/hh833994%28v=vs.108%29.aspx

Еще в процессе посмотрел два фреймворка для веб-сервисов и веб-приложений - https://github.com/ServiceStack/ServiceStack и https://github.com/NancyFx/Nancy . У обоих есть вариации на тему "хостинг в своем приложении", "хостинг поверх WCF", "Хостинг в IIS".
Причем, WCF хостинг на самом деле является многослойной пиздецомой поверх того же базового HttpListener который используется в "своем хостинге". В WCF поверх него накручена асинхроннная обработка запросов, фоновые потоки с чем-то вроде IO Completion Ports. Рефлектором это дело посмотрел - понять, какой из вариантов принципиально лучше и какой в этом вообще смысл, сходу не получилось.

В общем, по сравнению с jetty, сервлетами, кложурью и рубе с рельсами - это безумный жопный индусский недокументированный ад.

C# как отупление для мозга

Какая-то странная закономерность вырисовывается. Берем готовую либу (обычно с исходниками, я стараюсь по другому не делать). При этом если языки - питоны-руби-дельфи-хаскели-скалы-кложури - все в среднем нормально. Если С++ - скажем так, "приемлемо", по той причине, что там кривой код или не скомпилируется или не заработает никогда. Жаба - в среднем всегда ок. Наворочено, паттерны, но пригодно к использованию, если паттерны не бесят.

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

Разработка софта vs строительство зданий

Как известно, программирование часто сравнивают со строительством ("...залетевший дятел уничтожил цивилизацию...").
Меня в этом сравнении часто плющит следующее - почему в таком случае проекты, сделанные одним аутичным гуру, часто получаются дешевле и лучше, чем ентерпрайзный трэш, сделанный по всем правилам организации проектов, с "процессами" и прочим майндфаком. Т.е. это как если бы "здания, построенные лично архитектором часто лучше, удобнее и дешевле, чем здания построенные по проекту строительной конторой".
А разница в том, что в случае строительства издержки(overhead) на коммуникацию сильно ниже, чем издержки на личное замешивание архитектором раствора, сварку арматуры и тому подобное. А в случае программирования оные издержки уже сравнимы, причем получается, что эти издержки сильно зависят от уровня работников - в одном случае нужно сказать "нужно сделать каркас здания по проекту", а в другом подробно описать "замешайте раствора, сварите арматуру в нужных местах, поставьте опалубку и залейте раствор в нее".
В этом плане кодогенерация - это замена калдырей-работников роботами, а прорабов - теорией категорий и монадами.