Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумПаттерныАнтипаттерныТест-драйвЗаметкиВопрос-ответКнигорецензииСправочная

27. Два вида свободы

Существует два вида свободы — хорошая и плохая. Когда-то давно, когда еще никто толком не умел программировать, когда главным критерием качества программы был критерий «программа работает», программисты радовались любой свободе, которая им предоставлялась, совершенно не задумываясь о том, хорошая это свобода, или плохая.
Любое стороннее решение, будь то полноценная библиотека или единственный класс, предоставляют вам определенную функциональность, а вместе с ней и некоторую свободу действий.
Оличить плохую свободу от хорошей очень просто. Хорошая свобода предполагает легкость отказа от предоставленных услуг. Плохая вобода предполагает чрезмерную сложность отказа от услуг, предоставленных сторонним решением.
Базовый класс и виртуальные функции, паттерн «Visitor», паттерн «Variant», паттерн «Factory», слишком вычурная сериализация — все это примеры плохой свободы. Да, перечисленные механизмы решают поставленные перед ними задачи, однако подумайте, каких усилий будет стоить отказ от любого из этих механизмов в уже существующей системе.
STL-совместимые контейнеры, паттерн «Adapter», библиотека boost::function и boost::bind — это примеры хорошей свободы, поскольку отказ от любого из этих механизмов в пользу любого стороннего аналога пройдет для вас легко и безболезненно.
Плохая свобода это искусственные и не стандартизованные правила. Плохая свобода это предъявления требований к типам и интерфейсам. Плохая свобода это требования, взятые с потолка.
Хорошая свобода это минимальные требования, либо их полное отсутствие. Хорошая свобода это требования к семантике, а не к интерфейсу. Хорошая свобода всегда стандартизована, обоснована и оптимальна.
Используйте механизмы, предоставляющие хорошую свободу. Адаптируйте плохую свободу в хорошую. В собственных решениях предлагайте пользователю минимальные и стандартизованные правила игры.

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

индукционные печи INDUCTORSPB.RU. перевозка тяжеловесных грузов