metaclass: (Default)
[personal profile] metaclass
А вот скажите, почему у авторов гопнета так популярно делать классы и методы недоступными для разработчиков?
Сейчас сижу, например в ILSpy и делаю обертку над ServiceController, потому что нельзя без ловли исключений узнать, существует ли сервис, а конфигурацию сервиса так и вообще никак прямо узнать нельзя. При этом все полезные методы и классы (нативный интероп итд) сугубо приватные или внутренние.

Date: 2012-12-11 10:07 am (UTC)
From: [identity profile] evil-invader.livejournal.com
я с такой же проблемой сталкивался, когда пытался подточить VCL для специфических задач. Так рубило, что уже чуть ли не думал, как бы сделать грязный хак.

Date: 2012-12-11 10:12 am (UTC)
From: [identity profile] w00dy.livejournal.com
так у vcl жеж сорцы доступны

Date: 2012-12-11 10:40 am (UTC)
From: [identity profile] evil-invader.livejournal.com
перекомпиливать vcl?

Date: 2012-12-11 10:43 am (UTC)
From: [identity profile] w00dy.livejournal.com
как минимум то что нужно. Плюс наличие сорцов облегчает анализ. Я таким образом нашёл у DevExpress-овского грида обходные пути и сделал то что нужно было.

Date: 2012-12-11 10:57 am (UTC)
From: [identity profile] evil-invader.livejournal.com
ну вот по сорцам я как раз и понял, что нужные мне методы в привате. Не перекомпиливать vcl может и хорошая идея, но тогда на все машины разработчиков пришлось бы мою версию vcl ставить.

Date: 2012-12-11 11:19 am (UTC)
From: [identity profile] w00dy.livejournal.com
насчёт пересобрать всё я кажется погорячился. Как ещё вариант - отнаследоваться от нужного класса, перетащить в него всё что нужно и править. Чтобы таскать не всю vcl, а только минимум, если такое возможно и имеет смысл. Ну а перетянуть разрабов просто - положил бинарники в репо, настроил все пути чтобы искало там. Со следующим апдейтом всё приедет всем ;)

Date: 2012-12-11 06:13 pm (UTC)
From: [identity profile] sbj-ss.livejournal.com
Ребе, ви таки не слышали про crack-классы? Мы в своё время неоднократно пользовались.

Date: 2012-12-11 06:22 pm (UTC)
From: [identity profile] w00dy.livejournal.com
про такой фокус не слышал. Забавная технология.

Date: 2012-12-11 06:27 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Я постоянно использую. Да его сам борланд везде использовал.
По моему, как обходной вариант - заебись.

Date: 2012-12-11 10:29 am (UTC)
From: [identity profile] bydlorus.livejournal.com
Т.е. в жабе такого нет? Непонятно, при чём тут .NET.

Date: 2012-12-11 10:35 am (UTC)
From: [identity profile] metaclass.livejournal.com
Я жабу не так часто переписываю :)

Date: 2012-12-11 10:37 am (UTC)
From: [identity profile] volodymir-k.livejournal.com
Разные базовые культуры. Начиная со Страуструпа наСильники параноидально закрывают свои сундуки классы от внешнего мира, как гуры рекомендуют. Явисты глядят на смолток традиции, "давайте оставим если можно, вдруг пригодится" -- закрыты обычно только секурити методы.

Лично мне сишное прошлое предыдущего автора кода становится ясно видно по характерным подходам.

Date: 2012-12-11 10:40 am (UTC)
From: [identity profile] bydlorus.livejournal.com
Хорошее объяснение.

Date: 2012-12-11 10:58 am (UTC)
From: [identity profile] berezovsky.livejournal.com
ещё помню западло было, если сервис управляется с клиентского компа, надо было спрашивать админовские креденшиалы, шифровать, передавать на сервер, делать имперсонацию контекста и только потом дёргать сервис контроллер
Edited Date: 2012-12-11 11:02 am (UTC)

Date: 2012-12-11 06:15 pm (UTC)
From: [identity profile] sbj-ss.livejournal.com
Особенно смачно этот Холокост смотрится на WinAPI/OLE со своими CoSetProxyBlanket и иже с ними.

Date: 2012-12-11 11:07 am (UTC)
From: [identity profile] gineer.livejournal.com
Угу... вы еще про Эппл подобное спросите. :)

Date: 2012-12-11 11:29 am (UTC)
From: [identity profile] psilogic.livejournal.com
Это не только у авторов гоп-нета.
Обычно "приватизируют" ради совместимости - чтобы потом спокойно менять в следующих версиях, а кто полез хакать - сам дурак.

Date: 2012-12-11 11:40 am (UTC)
From: [identity profile] bydl0coder.livejournal.com
Ситуация "ССЗБ" это когда все методы и классы открыты - воруй, убивай, еби гусей, но будь готов ответить по закону. А тут все закрыто и "хак" заключается в создании форка.

Date: 2012-12-11 12:33 pm (UTC)
From: [personal profile] alll
ну какбэ открытость метода - это некий контракт на поддержание его в совместимом состоянии (выполняемый ли в дальнейшем - отдельный философский вопрос), желание отдельно взятого пользователя библиотеки воровать-убивать-и_третье_тоже тут не при чём

Date: 2012-12-11 12:43 pm (UTC)
From: [identity profile] psilogic.livejournal.com
если все закрыто, значит вся эта архитектура может в следующей версии по пизде пойти

Date: 2012-12-11 01:17 pm (UTC)
From: [identity profile] pv-jewel.livejournal.com
Открыть никогда не поздно. Особенно в следующей версии.

Date: 2012-12-11 01:58 pm (UTC)
From: [identity profile] bydl0coder.livejournal.com
Ну и пусть идет, у меня старая либа останется, благо, можно указать, какая версия нужна.

Date: 2012-12-11 02:41 pm (UTC)
From: [identity profile] psilogic.livejournal.com
А когда в новой версии появится какая-то фича, которую вам захочется поюзать, вам придется тратить дополнительные усилия на переход к новой версии.

Date: 2012-12-11 03:04 pm (UTC)
From: [identity profile] bydl0coder.livejournal.com
Как и говорилось выше, ССЗБ. В дотнете можно атрибут ставить.

Date: 2012-12-11 11:36 am (UTC)
From: [identity profile] altmind.livejournal.com
торжество инкапсюляции начинается тогда, когда в умах программистов начинают бродить мысли о CYA(клиенты расширяют классы, нарушают контракты в коде а потом сношают мозг саппорту). Когда программисты понимают, что не могут предусмотреть все случаи использования компонентов и что возможность кастомизации любых классов является залогом расширяемости и гибкости, появляется инкапсюляция в стиле питона, где инкапсюляция не энфорсится.

отдельного разговора требует принцип "make all classes final by default", по которому в свое время проехался nikitonsky.

Date: 2012-12-11 11:38 am (UTC)
From: [identity profile] bydl0coder.livejournal.com
"Бляди, сэр".

Date: 2012-12-11 11:41 am (UTC)
From: [identity profile] bydl0coder.livejournal.com
Делал "форк" ASP.NET MVC, чтобы отправлять с веб-сайта письма. Это последней каплей стало.

Date: 2012-12-11 12:22 pm (UTC)
From: [identity profile] denisioru.livejournal.com
а штатный SmtpClient не оло?

Date: 2012-12-11 12:42 pm (UTC)
From: [identity profile] bydl0coder.livejournal.com
Шаблон в строчку не рендерился. Соотв. класс принимает на вход стрим, но пишет в HttpContext.Current. Because fuck you, that's why.

Date: 2012-12-11 12:43 pm (UTC)
From: [identity profile] denisioru.livejournal.com
Всмысле, в чем трудности отрендерить view в строку?

Date: 2012-12-11 12:50 pm (UTC)
From: [identity profile] bydl0coder.livejournal.com
В том, что Микрософт на это забил. Пришлось вытащить три или четыре класса, потому что все нужное internal или протектед.

Date: 2012-12-11 12:11 pm (UTC)
From: [identity profile] n16bs.livejournal.com
Ну какбэ очевидно что то, что паблик - этим будут пользоваться индусыюзеры. Значит на это нужно писать доку в мсдн, нужно продумать 100500 безумных способов которыми юзер заюзает эти методы, нужно отвечать на вопросы про них в social.ms.com и т.д.

И что, неужели в этих ваших скалах в стандартной либе всё наружу торчит?

Date: 2012-12-11 12:31 pm (UTC)
From: [identity profile] metaclass.livejournal.com
В скале если не писать модификаторов - по умолчанию будет public. В гопнете - private.

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

Date: 2012-12-11 12:38 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
в гопнете вроде интернал

Date: 2012-12-11 01:22 pm (UTC)
From: [identity profile] pv-jewel.livejournal.com
классы - internal, методы - private

Date: 2012-12-11 01:07 pm (UTC)
From: [identity profile] n16bs.livejournal.com
Я сомневаюсь что в фреймфорке методы закрыты лишь потому, что это дефолтное поведение компилятора.

Date: 2012-12-11 01:16 pm (UTC)
From: [identity profile] falcrum.livejournal.com
Это показатель, да: «либо автор на ирц сидит»... :)

Date: 2012-12-11 06:17 pm (UTC)
From: [identity profile] sbj-ss.livejournal.com
Кто на ирц, кто на героине.

Date: 2012-12-11 12:12 pm (UTC)
From: [identity profile] n16bs.livejournal.com
Алсо >ILSpy
Попробуйте DotPeek от jetbrains.

Date: 2012-12-11 12:13 pm (UTC)
From: (Anonymous)
Из-за сего факта пришлось писать свой Heap, с поддержкой удаления элемента по валуе из серединки. Как стандартными контейнерами сделать тоже я не разобрался.
А так бы как унаследовался бы, прикрутил бы сбоку кэшер позиций в значений в массиве...

Date: 2012-12-11 12:49 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Старинная политика фирмы

Date: 2012-12-11 02:03 pm (UTC)
From: [identity profile] max630.livejournal.com
Ну а как по другому? Потом поменять направление обхода контейнера - и все говнохаки поломаются, визгу будет на весь интернет. Авторам это надо?

Date: 2012-12-11 02:04 pm (UTC)
From: [identity profile] bydl0coder.livejournal.com
Нужно, кстати, развить конспирологическую версию о том, что во всем этом виноват интеллисенс. То есть можно накрутить лапши из говна (потому что интеллисенс показывает все разработчикам из МС), а потом закрыть (чтобы интеллисенс не показывал ее разработчикам приложений)

Date: 2012-12-13 04:31 am (UTC)
From: [identity profile] mudasobwa.livejournal.com
Не самый элегантный вариант, конечно, но reflection (http://stackoverflow.com/questions/135443/how-do-i-use-reflection-to-invoke-a-private-method-in-c) не поможет?

Date: 2012-12-13 08:13 am (UTC)
From: [identity profile] metaclass.livejournal.com
Помог. Большую часть кода (нативные методы) я просто вытащил и скомпилировал, а нужные им данные вынял рефлекшеном.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 1st, 2025 01:32 am
Powered by Dreamwidth Studios