Использование интерфейсов

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

Читаем, делимся мнением, оставляем комментарии. Ну а я по свободе напишу еще что-нибудь. Уже могу сказать, что сейчас готовится большая заметка по безопасности.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

hyrurg

17 Мая 2011

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


Канат

17 Мая 2011

По-моему там где-то незакрытый тег, из-за которого невозможно читать статью


Ерлан

17 Мая 2011

Привет.
Статью неудобно читать))


ronin

17 Мая 2011

чё то Михаил ты там намудрил с оформлением, поправь, а то не удаётся почитать :)


Topal

17 Мая 2011

Статья понравилась, побольше бы таких статей. Только мне ее пришлось в Word копировать, чтоб прочитать (
много текста уходит за пунктирные поля (и в опере и в хроме таже проблема))


Topal

17 Мая 2011

Где лучше использовать инрефейсы, а где лучше абстрактные методы? В чем принципеальная разница?


Денис

17 Мая 2011

Поправьте, пожалуйста, верстку. Текст, после примеров, читать невозможно.
Или это только у меня?


Михаил Фленов

17 Мая 2011

В статье есть тект, похожий на теги <object> и IE проигнорировл это, а FF убил разметку страницы. Исправилено


Михаил Фленов

17 Мая 2011

Где лучше использовать инрефейсы, а где лучше абстрактные методы? В чем принципеальная разница?


Разниц много, но с точки зрения проектирования, все очень даже схоже. Где и что лучше использовать, сказать не могу. Я предпочитаю использовать абстрактные классы для случаев, когда описывается большой класс, и интерфейсы, когда нужно всего пару тройку методов. Просто если у интерфейса всего пару методов, то их можно реализовать где угодно, ведь интерфейсы позволяют множественное наследование и это придает дополнительную гибкость. Если методов много, то я предпочитаю абстрактные классы.


ronin

17 Мая 2011

Теперь, при создании любого класса, работающего с базой, просто передавайте ему этот интерфейс и вы в шоколаде.
Захотите мигрировать на другую базу данных, просто создадите еще одну реализацию MyMegaDBOracle и измените одну строку коды и вперед


тут я не понял, например, у меня работа идёт с Mysql, а я решил переходить на Oracle, а там другой синтаксис запросов, другой набор
компонентов доступа к бд с другой реализацией работы с этой базой (свойства, методы, события), что в этом случае значит "одна строка кода"?
мне ведь всё равно прийдётся перелопачивать весь этот класс для того что бы либо добавить этот функционал, либо переписать старый, разве не так?
в чём преимущества данного подхода?

В больших проектах иногда встает вопрос о том, чтобы проекты могли работать одновременно с разными базами данных. Сегодня заказчик хочет MS SQl Server, а
завтра он понимает, что нужно Oracle. А кто-то может не захотеть платить деньги и затребует MySQL. Использование интерфейсов позволит без проблем подменять
классы доступа к данным и прогрессировать с минимальными потерями


это как раз к вопросу выше, как эти потери станут минимальными при таком подходе?

Такие функции как поиск строки, обновление и удаление выглядят во всех базах данных одинаково, потому что SELECT он и в Африке SELECT.
Поэтому такие функции как FindRow, DeleteRow могут быть описаны прямо в базовом классе


я конечно понимаю что может быть я не прав, но при написании проектов (тем более больших) разве сейчас пишут ручками такие элементарные
функции? я купил например библиотеку компонентов DevExpress за 10000 рублей, а там такой функционал по поиску, фильтрации, сортировке, редактированию и т.д. и т.п. что мне
и за 10 лет такое не написать, смысл тогда заморачиваться с такими вещами? соответственно у меня возникает вопрос о целесообразности
написания класса прослойки для работы с базой данных?


VVS

17 Мая 2011

я конечно понимаю что может быть я не прав, но при написании проектов (тем более больших) разве сейчас пишут ручками такие элементарные
функции? я купил например библиотеку компонентов DevExpress за 10000 рублей, а там такой функционал по поиску, фильтрации, сортировке, редактированию и т.д. и т.п. что мне
и за 10 лет такое не написать, смысл тогда заморачиваться с такими вещами? соответственно у меня возникает вопрос о целесообразности
написания класса прослойки для работы с базой данных?

Ведь DevExpress, не сделает автоматическую выборку из БД того что нужно, не предусмотрит какие-то специфические методы? Вы все равно будете делать прослойку между DevExpress и вашей БД.
Если вы не хотите писать запросы ручками, используйте Entity Framework или другую ORM(как я понял DevExpress именно это вам и предоставляет), но вам все равно придеться создавать какую-то прослойку м/у вашей БД и тем что вы используете для доступа к ней.


Михаил Фленов

17 Мая 2011

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


ronin

17 Мая 2011

Ведь DevExpress, не сделает автоматическую выборку из БД того что нужно, не предусмотрит какие-то специфические методы? Вы все равно будете делать прослойку между DevExpress и вашей БД.


вы что то путаете, при чём тут компоненты отображения данных и запросы, все специфические моменты реализуются в компонентах доступа к данным, а DevExpress только отображает эти данные

но вам все равно придеться создавать какую-то прослойку м/у вашей БД и тем что вы используете для доступа к ней.


для этого существует огромное количество тех же компонентов, как платных так и бесплатных, ничего не надо придумывать

В Канаде у меня не такой большой опыт работы с разными компаниями, но там, где я работал, ни кто не использовал библиотек типа DevExpress. Везде пишут ручками. И лично я считаю, что эти библиотеки вселенское зло


тут я с тобой не соглашусь, то есть ты призываешь бросить весь опыт накопленный другими людьми и начинать изобретать велосипед? лично для меня моё время дорого стоит, и я лучше заплачу 5000 рублей (представь какая это смешная сумма) за библиотеку компонентов доступа к данным и не буду париться по этому, поводу, сэкономлю МНОГО времени, которое я лучше потрачу на вылизывание кода и интерфейса, что бы программа написанная мною была как можно лучше, и я смог заработать денег, а не сидеть и открывать америку заново

может вы тогда ещё предложите VCL переписать заново, если уж пошла такая пьянка?


Михаил Фленов

17 Мая 2011

тут я с тобой не соглашусь, то есть ты призываешь бросить весь опыт накопленный другими людьми и начинать изобретать велосипед?


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

Все эти сторонние прибамбасы так же в ОБЯЗАТЕЛЬНОМ ПОРЯДКЕ нужно подключать через интерфейсы. Тогда вы сможете легко подменять код третих фирм легко и не принужденно.


ronin

18 Мая 2011

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

для себя резюмирую

основные преимущества использования сторонних библиотек:

1. скорость разработки: ничего придумывать не надо, только подключай и пользуйся
2. качество: я всё таки думаю если человек целыми днями занимается разработкой компонентов доступа к данным, отображения данных и т.д. поболее меня соображает в этом вопросе, поэтому мне кажется что наступать на грабли на которые кто то уже когда то наступал не стоит, на это уйдёт много времени и не факт что ты преуспеешь
3. поддержка новых технологий: думаю здесь всё понятно, субд развиваются, интерфейсы тоже не стоят на месте, за всем не уследишь, и соответственно взваливать на себя непомерный груз не стоит

основные недостатки данного подхода:

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

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

p.p.s ни в коей мере не пытался оспорить принцип описанный в теме, это на 100% правильно но в жизни всё немного сложнее и приходится выбирать, даже в теории БД есть такое понятие как денормализация :)


VVS

18 Мая 2011

Стало интересно, назовите пожалуйста библиотеку для работы с БД которой вы пользуетесь и она все умеет?


Михаил Фленов

18 Мая 2011

Что имеется ввиду под "она все умеет?". Я пользуюсь ADO.NET и она все, что должна уметь делать - умеет делать.


VVS

18 Мая 2011

Это вопрос был для ronin. Я просто не понимаю, какую библиотеку он имеет в виду. Я тоже использую ADO.NET(включая Entity Framework), но при грамотном проектировании всегда необходимо использовать прослойку для работы с ней(репозиторий), ronin утверждает что можно обойтись без этой прослойки. Вот мне и стало интересно, что же это за библиотека для доступа к БД.


Алексей

18 Мая 2011

Михаил,извините что не в тему,но не могли бы прокомментировать взлом серверов NASA и про деятельность хакера TinKode.


ronin

19 Мая 2011

но при грамотном проектировании всегда необходимо использовать прослойку для работы с ней(репозиторий), ronin утверждает что можно обойтись без этой прослойки


можно разъяснить о чём речь? не очень понимаю что за прослойка?


VVS

19 Мая 2011

можно разъяснить о чём речь? не очень понимаю что за прослойка?

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


ronin

20 Мая 2011

я как раз и говорил о том что при использовании таких компонентов как DevExpress все эти элементарные методы реализованы внутри самих библиотек, а на самом компоненте (например грид) расположены спец кнопки (например навигатор) для выполнения этих действий

понятно что есть специфические моменты кроме вставить/удалить/редактировать, вот эти функции уже реализуются отдельно ручками, через интерфейсы или ещё каким либо способом, это на усмотрение разработчика


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

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

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

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

Пишите мне