Автор будет очень признателен, если Вы кликнете по одной из белых ссылок выше.
Вам это ничего не стоит, а автору сайта будет приятно ;)
Найдено страниц: 43 [показано 10]
Залепа №13. О грамотном проектировании и неграмотном IDE.
Степень соответствия запросу: 65,81%
Фрагменты текста поста : ... Для простоты будем рассматривать только один из таких справочников - справочник пользователей... ... Таким образом у нас получается примерно такой открытый интерфейс нашего класса: Набросок класса public class CUserMgr { // получить идентификатор по логину public int GetID(string login) {... ... } } Так же класс должен содержать еще набор закрытых методов для редактирования пользователей: добавление нового пользователя, удаление существующего, изменение параметров пользователя, загрузку и сохранение списка пользователей и т... ... Итак, получаем как минимум две формы, которые должны напрямую обращаться к внутренней структуре класса CUserMgr , т... ... Чтобы формы могли обратиться к внутренней структуре класса CUserMgr придется внутреннюю структуру сделать открытой, т... ... Открытая структура класса менеджера приводит к путанице и соблазну использовать эти методы (которые по логике должны быть закрытыми) не по назначению... ... Все это можно перетерпеть если вы создаете класс, который будет использоваться только в вашей программе и код которого никогда не будет использован где-либо еще... ... Вариант номер раз (стиль программирования a'la Microsoft) Суть заключается в избавлении от необходимости использовать одним классом внутренней структуры другого класса... ... Решение сводится к созданию классов, представляющих сущности используя в качестве базы класс формы... ... Нам необходимо создать отдельный класс, представляющий собой запись из БД (информацию об отдельном пользователе)... ... Причем этот класс должен быть порожден от класса Form , чтобы он мог отобразить себя для редактирования данных пользователя... ... Набросаем примерную структуру: Набросок класса записи public class CUser : Form { private string Login... ... Теперь нашему окну редактирования пользователя (классу CUser ) уже не нужно обращаться к классу CUserMgr за информацией - все необходимое он содержит в себе... ... Наш класс менеджера также должен быть наследником класса формы ( Form )... ... список пользователей (объектов класса CUser ) он содержит внутри себя... ... Класс CUser все еще глобален и видим любым и каждым со всеми вытекающими отсюда отрицательными последствиями... ... Вариант номер два (реально объектно-ориентированный) Второй вариант использует возможность C# создавать вложенные классы... ... В C# введена возможность определить класс внутри другого класса... ... При этом встроенный класс получает статус "члена класса-оболочки", т... ... все объекты вложенного класса (кем бы и где бы они не были созданы) имеют ПОЛНЫЙ доступ к членам своего класса-оболочки: они могут использовать и защищенные и даже закрытые методы класса-оболочки... ... } } Итак, вот что мы получаем при таком подходе: программа "видит" только класс CUserMgr , о существовании внутренних классов она даже не подозревает и естественно не может получить к ним доступ... ... Она может использовать только открытый "внешний интерфейс" класса CUserMgr... ... Если внешний интерфейс не изменится, то эти модификации никак не скажутся на работе основной программы, использующей наш класс... ... Встроенные классы могут без проблем обращаться к внутренним (закрытым) методам класса CUserMgr , что позволяет в ряде случаев сильно упростить программирование этих классов... ... Классы, созданные по описанной выше "технологии" будут нормально компилироваться и работать (а как же иначе - все ведь сделано верно, в соответствии с требованиями и возможностями языка C#)... ... Но в IDE вы не сможете использовать визуальный редактор для форм, которые являются вложенными в другие классы (в нашем случае это CUserEdit и CUserList ) - IDE вместо отображения формы просто будет материться по-английски... Подробнее: http://fit-media.com/post_1204892317.htmlЗалепа №9. Microsoft друзей не признает.
Степень соответствия запросу: 30,4%
Фрагменты текста поста : ... Определение класса "календарь" можно было бы даже вложить в определение класса "дата"... ... Другими словами, правильное проектирование в ООП - это создание классов, АБСОЛЮТНО НЕЗАВИСИМЫХ от других классов и объектов, инкапсулирующих все необходимые для работы классы внутри себя... ... // инициализировали другим объектом класса CData (присваивание) cd... ... Естественно, класс CDate должен быть порожден от System... ... Итак, упростим задачу до предела: есть класс CDate , представляющий ни что иное как обычную календарную дату... ... есть класс CCalendar , представляющий собой вспомогательное окно, отображающее календарь и принимающее ввод от юзера... ... Требования к реализации: 1) все операции касающиеся даты, должны выполняться в классе CDate... ... 2) класс календаря, фактически являясь окном, имеет только "оконную" функциональность... ... пользователь нашего класса CDate НЕ должен иметь доступ к функциям внутренней обработки... ... Отсюда вытекают пункты: 3а) класс календаря не должен быть виден пользователю... ... 3б) проект должен иметь некую "модульную" структуру, чтобы встраивание класса CDate в реальную программу было максимально простым... ... Из третьего пункта следует, что объекты класса CCalendar будут создаваться не пользователем, а только классом CDate , им же они будут контролироваться в течении всей жизни календаря и, в конце-концов, он же их будет и уничтожать... ... :( В C++ мы бы просто сделали класс CCalendar другом класса CDate , разрешив тем самым календарю использовать внутренние механизмы в виде вызовов защищенных методов CDate... ... Согласен, решение не самое элегантное, но, поскольку оба класса разрабатываются нами, а пользователи о таком "разделении труда" даже не подозревают (и соответственно не смогут, например, породить наследников от календаря), то такое решение вполне приемлемо... ... Подозреваю, что именно поэтому классы... ... Чем грозит такое "открытие внутренней функциональности" наверное объяснять не нужно: вот есть класс, вот его методы, причем ОТКРЫТЫЕ методы, но пользоваться ими нельзя, т... ... А именно, если распространять свой класс CDate в виде исходников, то он потянет за собой и класс CCalendar , а мы бы не хотели, чтобы пользователь знал о нем... ... Если же скомпоновать наш класс в сборку (assembly), то класс календаря можно сделать ненаследуемым, но при таком подходе пользователю уже не удастся сделать программу из одного exe-файла - придется тягать за собой еще и нашу сборку... Подробнее: http://fit-media.com/post_1199568462.htmlОптимизация PHP-кода
Степень соответствия запросу: 1,18%
Фрагменты текста поста : ... Если функции замены строк, может принимать в качестве аргументов как массивы, так и одиночные символы, и если ваш список аргументов не слишком длинный, подумайте над тем, чтобы записать несколько одинаковых выражений замены, проходя один символ за раз, вместо одной строки кода, которая принимает массив поиска и замены Лучше использовать конструкции else if , чем несколько конструкций if... ... Скорость вызовов метода, не зависит от количества методов в классе... ... Я добавил 10 методов в тестовый класс (до и после тестового метода) и производительность не изменилась... ... Методы в производных классах работают быстрее, чем они же, определённые в базовом классе... ... Это один из вариантов оптимизации PHP-кода в байт-код утилитой Zend Optimizer... ... Не определяйте каждую структуру данных в виде класса - массивы бывают намного полезнее... Подробнее: http://fit-media.com/post_1207831883.htmlЗалепа №8. Крах технологии от обычного int'а.
Степень соответствия запросу: 0,88%
Фрагменты текста поста : ... // теперь А и С указывают на один и тот же объект a... ... У меня только один вопрос: считаете ли Вы такое поведение ЛОГИЧНЫМ и УДОБНЫМ для разработчика... ... Майкрософт уже не один год продвигает... ... Но давайте мысленно заменим класс MyCls на какой-нить нормальный класс с кучей полей, свойств, интерфейсов, закрытых и открытых методов, а так же "зароем" переопределение операции сложения куда-нибудь в пра-пра-пра-родителя этого класса... ... А теперь представьте, что Вам необходимо встроить этот класс в свой проект и сцепить его в плотный узел с десятками других классов и тысячами объектов... Подробнее: http://fit-media.com/post_1198554053.htmlЗалепа №10 Cупер-хренорезка может все. Только хрен не режет.
Степень соответствия запросу: 0,53%
Фрагменты текста поста : ... По крайней мере это более-менее логичное объяснение такому странному проектированию класса контрола... ... :) Чем глубже я закапывался в изучение списка методов и свойств класса DateTimePicker, тем больше мне казалось, что его проектировали не совсем вменяемые люди... ... Поменяйте его тип с bool на int и к списку свойств GrowAndShrink и GrowOnly добавьте еще и None , и можно "облегчить" класс на целый метод... ... Понятно, нужно знать кто и когда соорудил тот или иной класс, особенно если это коммерческая разработка... ... Еще один способ облегчить тяжелую жизнь программистам: циклы типа while(m... Подробнее: http://fit-media.com/post_1202303173.htmlСтатичные файлы vs скрипты. Невидимое зло.
Степень соответствия запросу: 0,38%
Фрагменты текста поста : ... Вот четыре основные вещи, дающие абсолютно лишнюю нагрузку: хранение стилей в БД склеивание стилей в один большой блок хранение шаблонов в БД использование "... ... Один фиг копировать придется... ... Склеивание стилей в один большой блок... ... ), собирать в кучу (опять же скорее всего из БД) отдельные куски стилевых файлов, клеить их в один и только потом отправлять клиенту... ... ни один вменяемый дизайнер/верстальщик ни за какое бабло не станет проводить редактирование шаблонов в броузере... ... Проблема ужесточается тем, что времена когда страница сайта строилась из одного шаблона, давно прошли и ныне страницы современных сайтов собираются из кучи мелких шаблончиков - под каждый блок сайта свой шаблон и, возможно, не один... Подробнее: http://fit-media.com/post_1283692130.htmlВсе ли CMS одинаково полезны?
Степень соответствия запросу: 0,26%
Фрагменты текста поста : ... Есть как "заточенные" под какой-то один вид "деятельности" (блог, форум или магазин), так и универсального характера... ... Зато один раз основательно пропотев при установке, потом пользоваться ей можно обучить даже неандертальца, т... ... Опять же, если человеку требуется только один сайт (например личный блог, форум или магазин), то вполне можно обойтись стандартными шаблонами дизайна... ... Может я чего-то упустил, но ни один из виденных мной движков не давал сколько-нибудь полной (и полезной) статистики работы сайта... ... Кроме того, ни один из приклеенных к страницам счетчиков не покажет вам, сколько и каких ботов посетило ваш сайт и какие именно страницы они нюхали и когда это произошло... Подробнее: http://fit-media.com/post_1200405197.htmlБабах Большой Адронный Коллайдер!
Степень соответствия запросу: 0,22%
Фрагменты текста поста : ... Адин сделали, фтароой сделали, и вместе их два один сделали... ... Еще один Большой Взрыв захотели... Подробнее: http://fit-media.com/post_1221043919.htmlЗалепа №12. Microsoft не знает собственного кода.
Степень соответствия запросу: 0,17%
Фрагменты текста поста : ... Безусловно, чем больше различных свойств, методов и событий предусмотрели для класса его создатели, тем более гибок он будет в использовании... ... Последнее оставим для другого раза, а вот первые три изучим поподробнее... ... По крайней мере они другого варианта не узрели... ... } Результат работы обоих примеров одинаковый, только у меня переопределен только один обработчик, не нужна дополнительная переменная, да еще и ввод символа "минус" разрешен, равно как и десятичной точки и десятичной запятой... Подробнее: http://fit-media.com/post_1203179184.htmlМиф о метафоре
Степень соответствия запросу: 0,17%
Фрагменты текста поста : ... Идея того, что хороший пользовательский интерфейс должен быть обязательно построен на основе метафоры, - один из самых коварных мифов, проникших в компьютерное сообщество... ... Тот эпизод в фильме Стар Трек , когда Скотти возвращается на Землю в 21 век и пытается говорить с компьютером через мышь - один из моментов, который не является фантастикой... ... Он не может хранить больше, чем один объект, не помнит, что хранил ранее, не может определить, откуда взялось изображение, он не может показать вам уменьшенные картинки того, что содержит и не хранит свое содержимое от запуска до запуска системы... ... Еще один "выдающийся" пример - новый интерфейс для взаимодействия с компьютером под названием MagicCap... Подробнее: http://fit-media.com/post_1206190085.html
