Блог

Как обращатся к переменным объекта?

Интересный вопрос поступил в студию:

в методе класса лучше обращаться к полям этого класса или к свойствам(инкапсулирующим эти поля)? Или зависит от ситуации, допустим в свойстве есть какая-то проверка, тогда через свойство. Если нет проверок, то через поле по идее будет работать быстрее.

Был как-то почти такой вопрос - почему, я против прямого доступа к переменным объекта и я отвечал в комментариях. Сегодня решил ответить в отдельной заметке, чтобы потом проще было находить и ссылаться. В вопросе кроется и ответ - доступ к переменным должен осуществляться ТОЛЬКО через свойства. Никогда не должно быть прямого доступа, даже если вы не делаете никаких проверок. Я понимаю, что впадлу писать get/set и для таких случаев в C# есть офигенная конструкция:

Именование переменных

Я уже однажды восхищался именованием переменных индусами в заметке ERP система глазами программиста. Сейчас по работе расширяю один Web сервис, который позволяет обмениваться данными со сторонней конторой. Два года назад мы написали им спецификацию и в ней имена переменных были вполне нормальными: AddressLine1, City, Province, PostalCode... Клиенту понадобилось расширить сервис и передавать еще и данные о пользователе. 

Не знаю почему, но на этот раз отдали работу над сервисом индусам. Казалось бы. всего лишь добавить несколько полей не такая проблема. Но эти красавцы умудрились назвать поля LastNm, FrstNm, BrthDt, EMailAdrTxt. Блин, ну неужели так сложно назвать нормально имена полей - LastName, FirstName... Удивило поле EMailAdrTxt своим Txt на конце. У них email адрес может быть не Txt? Нехило обрадовало поле BrthDt, потому что его передают в виде текста. В Индии наверно не знают, что существует такой тип данных как DateTime и он позволяет решить проблемы с ошибками неправильного ввода даты. 

Какие программы лучше писать

Интересный тут комментарий появился, в котором меня заинтересовал вопрос - нужен ли опыт работы в крупных проектах? Ну для начала, смотря какой. Если проект крупный, но код дерьмо, то лучше такого опыта не иметь. Неправильно заученный материал для многих – хуже незнания. Просто если вы не знаете, то можете спросить, как правильно. А если вы воспринимаете некорректные технологии за хорошее правило (и хуже того если верите, что это хорошо), то это на много хуже.

Лично я ничего не воспринимаю на веру и для меня нет авторитетов, я человек мыслящий и сам анализирую все и вам советую. Уж много раз говорил вам, не творите себе авторитетов и в том числе мои слова не воспринимайте на безоговорочную веру. Я очень часто анализирую что-то и предполагаю, что может случиться. На пример, я часто пишу, что к концу года будет PS4, но это просто мои мысли, а не факт.

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

uniqueidentifier поле в Transact-SQL

Тип данных uniqueidentifier в Transact-SQL достаточно противный. Если указать некорректное значение, то запрос генерирует ошибку, поэтому прежде чем передавать что-то в запрос, желательно убедиться, что значение верное. Приятней было бы, если бы запрос ничего не возвращал, но это мое желание, которое не совпадает с тем, что сделали в Microsoft. Уверен, что у них были причины, чтобы генерировать ошибку и неплохие.

Короче, все это неважно и я бы не написал об этом, если бы не выполнил вот такой запрос:

select * from session where ID = '1756cb52-5b9e-4c95-8de4-b1ae7e5c2b81test'

Проблема Delphi – несовместимость версий

Вот недавно тут в комментариях увидел в очередной раз, что кто-то до сих пор пишет в Delphi 5. Что заставляет людей оставаться в столь старой версии среды разработки, когда появились на много более мощные версии? Мне кажется, что это несовместимость кода и в особенности компонентов. Когда я писал код на Delphi, то отказался от использования компонентов как раз по причине того, что при выходе новой версии постоянно возникали проблемы.

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

Невидимые компоненты я вообще считаю не очень удачной идеей в программировании, если они не имеют никакого пользовательского интерфейса. В такой компонент можно засунуть например меню, потому что нужен вызов редактора меню (есть какое-то визуальное общение с пользователем). Ну а устанавливать простые свойства типа строка/число/адрес можно и без компоненты.

Как сделать корзину покупателя на сайте

Сегодня получил следующее письмо, которое может быть интересно народу:

Меня интересует такие вопросы:

1. Как реализовать корзину индивидуально для каждого клиента в отдельности. Читал что корзина покупателя должна создаватся из следующих данных: URL клиента и индификатора сессии, так ли это. Если это так то как это сделать?

2. Как лучше реализовать корзину через сессии или через куки что лучше?

3. Я обращал внимание на некоторых сайтах пока не зарегистрируешся некоторые надписи (ссылки) невидны на сайте, но после регистрации они появляются. Как это делают?

Сайт делаю в Adobe Dreamweaver 8, стоит Денвер на компе, phpMyAdmin, ОС Vista.

Михал, если бы вы решали эти задачи, то как бы вы поступили мне интересно узнать ваше мнение. Я хочу реализовать это на языке PHP, возможно использование JavaScript.

Дерьмовый код

Интересная критика одного программиста. Он увидел MVC проект, который написан с использованием Entity Framework и выдал критику - дерьмово написано, и нахрена использовать дебильную EntityFramework, когда есть ADO.NET.

Вы знаете, я сам не люблю EntityFramework и уже много раз говорил, что Linq только портит код, а именно Linq чаще всего используют с EntityFramework. Но критиковать код только за то, что кто-то не знает этот Framework и любит использовать чистый ADO.NET - позорно и не профессионально. Я не люблю Linq, но если какой-то проект написан с его использованием успешен, отлично работает и без проблем поддерживается, то мне насрать, что там используется Linq. Критиковать за это нельзя.

Оператор goto в PHP

На PHP пишу уже давно, но только сегодня узнал, что начиная с версии 5.3 этот язык начал поддерживать goto оператор. Я помню еще в 90-х годах, когда программировал под MS Dos уже среди программистов ходило правило - не использовать goto. Это зло, которое портит программы. С тех пор утекло уже много лет и я никогда не пользовался goto под Windows ни в одном языке программирование.

Удивило то, что этот оператор появился в PHP 5.3. Я бы понимал, если бы он появился в первых версиях, а в 5.3 его убрали, как настоящее зло, но наоборот... Неужели мир перевернулся и переходы по меткам стали добром?

Unit тесты

Недавно обещал написать свое отношение про unit тесты. Лично я не считаю их модной штучкой, это необходимость современного мира, чтобы можно было создавать более надежный код, который не будет падать каждый день и на каждом углу. В домашних проектах я тесты не пишу, но на работе по возможности стараюсь писать и покрывать все, особенно финансовые модули.

Заметка получилась достаточно большая, поэтому я ее решил поместить в статьи, да и проще будет ее там потом найти.

Переход с WinForms на MVC

Первая реализация ASP.NET использовала WebForms – самая ужасная идея для Web программирования. На то, чтобы это понять, у Microsoft ушло некоторое время, но за это время народ успел уже создать сайты на этой технологии. Но вот Microsoft уже одумалась и уже давно предлагает программистам более интересный и качественный вариант – MVC (Model View Controller).

Но только проблема в том, что старый вариант C# и ASP.NET использовали URL в виде ИмяФайла.aspx, после чего идут параметры страницы. А вот в MVC предлагается немного более гибкий вариант controller/action. Controller определяет файл, который будет обрабатывать запрос, а Action – это имя метода. Это очень удобно, но что делать, если у вас уже есть сайт на WebForms и не хочется терять старые URL, чтобы не терять ссылки, которые уже набраны. Ведь если изменить URL страниц, то все, что ссылается может быть разрушено.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне