Я пиарю не столько себя, сколько компанию, в которой работаю :) И уже из этого делаю вывод, что если нормальные компании принципиально существуют, то нежелание их искать — это проблема конкретного человека.
Очень понравилась компонентная структура. Когда автор мне про неё впервые рассказал, я так возбудился, что тут же побежал прикручивать её к своему проекту :) Подход действительно работает очень хорошо и заставляет посмотреть свежим взглядом на заезженную парадигму ООП и её место в народном хозяйстве :)
Жесть какая. Соглашусь с Ariman: дельфи живёт только за счёт легаси кода. Никто в здравом уме не будет писать на нём новую энтерпрайз систему, тем более высоконагруженную.
Странно. Регался там ещё месяца полтора назад. Сказали, что напишут ближе к началу курса, но я так ничего от них и не услышал. Сейчас попробовал зарегаться на ту же почту — создался новый аккаунт. Похоже, они решили забить на тех, кто рано подал заявки :)
Здравствуйте. Меня зовут Вася и я… Мне сложно об этом говорить… Я делал девайсы на ардуине. Но после того, как я прочитал книгу доктора Аримана «STM32: жизнь без страха», моё представление о мире полностью перевернулось. Моя жизнь наполнилась красками, я сбросил оковы 8-битных вычислений и открыл для себя путь к просветлению. Я обрёл внутреннее равновесие и уверенность в своих девайсах, о котором я не мог и мечтать, используя ардуину. Спасибо!
Я пытаюсь бороться не столько с размытием логики, сколько с ухудшением читаемости. Основная проблема, которую я пытался осветить в статье — неоднозначность восприятия расширений при разборе неизвестного кода. В то время, как с обычными статическими классами всё понятно (вот класс, а вот его статический метод), в случае с расширениями может возникнуть путаница (не всегда понято, что перед тобой: расширение или член класса).
Зачем выдумывать свой пример, если есть существующие, например, тот же Linq. Как бы вы его перепели статическими методами и во что бы превратились цепочки вызовов list.Where(…).Where(…).Take(…).Sort(…)…?
Расширения изначально создавались для реализации LINQ, и я обеими руками за их использование в подобных сценариях. Если вы прочитаете апдейт к посту, то поймёте, что я имел в виду совершенно конкретный сценарий применения расширений.
У нас, например, расширение IsDbNull для Object находится в файле +System\Data\ObjectExtensions.cs и пространстве имен System.Data. Очень удобно и прозрачно.
Вы тоже молодцы, что изначально всё регламентировали :) К сожалению, есть проекты, развивашиеся спонтанно и не имеющие чётко определённой структуры. В подобный проектах фанатичное использование расширений, рандомным образом раскиданных по файлам, только ухудшает и без того затруднённое понимание кода.
Безусловно, расширения — очень полезная вещь и в некоторых случаях очень удобна. Однако когда её фанатично начинают пихать в все подходящие и неподходящие места, наступает полный мрак и ппц :)
Насколько я знаю, extensions изначально и создавались для того, чтобы расширить IEnumerable (IQueryable и иже с ними). В этом случае их можно и нужно применять. ИМХО не зря в МСДН написано, что программист будет чаще вызывать расширения, чем создавать свои. Одно дело — вызывать общеизвестные Where, Select, Skip и т. д., и совсем другое — продираться через дебри доморощенных расширений, пытаясь угадать, что это за метод: член класса, или extension.
В посте я говорил о случае, когда класс и расширения находятся в одном и том же проекте и разрабатываются одними и теми же людьми. То есть, функционал, который люди хотят упихать в классы, но не могут этого сделать по причине баттхёрта от нарушения инкапсуляции, успешно пихается в расширения. ИМХО это не клёво.
А ваш пример вполне правомерен, для того расширения и были придуманы.
Let the holy war begin.
Мой пример с котопсом, к сожалению, взят из реальной жизни. За исключением имён классов и методов, конечно :)
Как я уже и сказал, я только «за» использование расширений там, где это оправдано.
Расширения изначально создавались для реализации LINQ, и я обеими руками за их использование в подобных сценариях. Если вы прочитаете апдейт к посту, то поймёте, что я имел в виду совершенно конкретный сценарий применения расширений.
Вы тоже молодцы, что изначально всё регламентировали :) К сожалению, есть проекты, развивашиеся спонтанно и не имеющие чётко определённой структуры. В подобный проектах фанатичное использование расширений, рандомным образом раскиданных по файлам, только ухудшает и без того затруднённое понимание кода.
А ваш пример вполне правомерен, для того расширения и были придуманы.
З.Ы. Обновил пост.