2009-02-23 4 views
5

Кажется, что здесь есть приличная неприязнь к ужасно переработанным API, которые разработаны для бесконечной гибкости и, таким образом, не упрощают простые вещи. Тем не менее, похоже, что нет недостатка в API, которые требуют от вас использовать 8 разных классов и писать 20 строк шаблона только для выполнения простых, общих задач. Я не буду упоминать имена, потому что это не должно быть проблеском о том, являются ли конкретные API более сложными.Мотивация для перепрограммируемых API?

Что вы считаете основной причиной этих ужасно перегруженных API? Как вы думаете, что должно произойти, чтобы разработчики API не могли создавать такие чудовища?

Редактировать: IMHO, даже создание многоразового кода действительно является хорошим ответом, потому что, если API смехотворно сложно использовать и требует тонны и тонны шаблона, преимущества повторного использования становятся сомнительными.

+0

«Я не буду упоминать имена, потому что это не должно быть проблеском о том, являются ли конкретные API слишком сложными». и все же «Кроме того, если я могу спросить, что является худшим примером переработанного API, который вы видели?»? –

+0

Я собирался сделать тот же комментарий. Вид странный. –

+0

С другой стороны, это было хромой. Удалены. – dsimcha

ответ

0

Я не думаю, что что-либо может помешать людям пережить проблемы. Это связано с решением проблем. Методологии вроде XP пытаются отговорить его, но когда дело доходит до него, все думают: «Но если я сделаю это более общим, то я смогу его повторно использовать в таких-то таких»

1

«Преждевременная оптимизация - это корень всего зла».
--Don Кнут

Тем не менее, это очень, очень заманчиво, потому что программисты инстинктивно, как эффективность и сообразительности.

+0

Это на самом деле не связано ...... – Pacerier

2

Корень всего зла - разработчики, не являющиеся a) умные/опытные и б) достаточно адекватные.

+0

c) И слишком много времени. г) И не достаточно внимателен к другим людям, которым не хватает времени. д) И не тратить время на то, чтобы сделать вещи простыми. – Pacerier

8

Я считаю, что это часто является следствием так называемого Second System Effect. Дизайнеры берут уроки, извлеченные из первого разреза дизайна «1-й версии», и делают следующую версию настолько более гибкой, что она становится слишком сложной и трудно понятной.

Книга Фред Брукс The Mythical Man-Month представила этот термин и подробно об этом говорит.

2

Я не уверен, что это случай чрезмерной инженерии или недостаточно абстракции. Окна api - яркий пример этого.

Когда-то давно я потратил много времени на создание механизма печати и предварительного просмотра. Мне пришлось декодировать вызовы windows api, необходимые для отображения вещей на экране и вывода на принтер. Создавая абистрацию api, я попытался подумать о том, что пытается сделать разработчик ... например: «Я хочу нарисовать ширину 1 точки, красную линию от координат (1, 1) до (8, 1) - выражены в дюймах. "

эквивалентные окна api для этого включают в себя множество раздражающих строк кода ... создайте кисть, выберите ее в контекст устройства, задайте начальную точку, обработайте конверсии от дюймов до пикселей, доведите до конечной точки и т. д. мой абстрагированный api - это один вызов: dpLine (documentHandle, x1, y1, x2, y2, ширина, цвет); // где x1, x2, y1, y2 выражены в дюймах

В этом случае, я думаю, что окна gdi api слишком низкие. Я уверен, что есть веские причины для того, что они сделали, и просто не было времени/энергии, чтобы создать подходящий интерфейс для программистов, которые могут его использовать. Причиной монстра, вероятно, являются только крайние сроки.Апи технически точна; это позволяет программисту делать то, что им нужно. Этого достаточно, чтобы отправить его. Но это настолько низкий уровень, что абстракции третьей стороны необходимы, чтобы сделать ее пригодной для использования. IMO, вы можете сделать аргумент для ОС, чтобы обеспечить низкоуровневый, сложный api, как это, но сторонний инструмент не должен быть таким сложным.

-Don

0

Я думаю, что Python страдает от второй системы Effect. В версии 2.x существуют два типа классов и различная семантика.

Надеюсь, Python 3.0 решит большинство из этого.

+1

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

Смежные вопросы