Кто-нибудь дизайн апи или библиотечный код таким образом?

голоса
2

Я читал некоторые вещи о том, как создать библиотеку или API хорошо, и наткнулся на большой разговор Джошуа Блоха в Google Tech Talks. Теперь, хотя я нигде рядом профессиональных разработчиков API, я думаю, программирование кучи классов / функций аналогичное, хотя и значительно уменьшенная версия одного и то же - четкое разделение действий, легкость и приятное использование, поощрение чистого кода , и т.д.

Я шел через какой-то широко используется с открытым исходным кодом Java кода и не получил эту идею (ничего нового, а просто положить его доходчиво ...)

Возьмем пример псевдокод (или , может быть , некоторые диалект BASIC):

1. new label
2. set name 'hello world'
3. set color 'blue'
4. show 'topmost'
5. on click hide

Теперь вдохновленный код Java я хотел бы быть в состоянии сделать что - то вроде этого:

1. Label l = new Label()
2.          .setName('Hello World')
3.          .setColor('blue')
4.          .show(zindex.top);
5. l.onClick = l.hide() ;

Мой вопрос заключается в следующем:
начиная ли кто - либо другой дизайн APIs от псевдо-коды , как это?

Это хорошая идея , что - то маленькое? Скажем ДО 10 классов каждый с , может быть , 10 методов, каждый метод не более , чем 5-6 строк кода внутри него. То есть , очевидно , просто грубый набор чисел , чтобы , чтобы показать размер классов , которые будут разработаны - нигде близко к полному API , а не просто проект хобби - профессиональный пакет , который делает что - то маленькое , но делает это хорошо .

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

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

Другое дело в том , что существительные и глаголы оставаться простыми , что позволяет ваш конечный продукт увернуться от MultiPhraseAbstractParadigmDesignPatternImplementor синдрома :-D

Задан 22/01/2010 в 20:40
источник пользователем
На других языках...                            


4 ответов

голоса
0

Да, это так, что JQuery предназначен, это всегда заканчивается возвращением себя, так что вы можете методы цепи, как это.

Ответил 22/01/2010 в 20:42
источник пользователем

голоса
0

Я, как правило, начинают с пустыми классами и методами. Его действительно вопрос сверху вниз против снизу вверх конструкции.

Я действительно предпочитаю огромные доски эскиз, хотя.

Ответил 22/01/2010 в 20:45
источник пользователем

голоса
3

Это довольно распространенный шаблон проектирования называется свободно интерфейс . Это общепринятая в функциональных языках и приобретает все большую популярность в других странах. Я впервые увидел его на схеме.

Это очень удобно и читаемая идиома, но помните, что часто будет время, когда вы на самом деле хотите, чтобы инициализировать более одной переменные в вызове одной функции. Например, когда есть внутреннее состояние, которое должно быть установлено в зависимости от комбинации данных, или при установке и перезапись значения по умолчанию является дорогостоящим. Так, как и со всеми «шаблонов», использовать разумно и с предусмотрительностью.

Ответил 22/01/2010 в 20:52
источник пользователем

голоса
1

Jquery делает именно это. От http://net.tutsplus.com/tutorials/javascript-ajax/jquery-1-4-released-the-15-new-features-you-must-know/ :

jQuery('<div/>', {  
    id: 'foo',  
    css: {  
        fontWeight: 700,  
        color: 'green'  
    },  
    click: function(){  
        alert('Foo has been clicked!');  
    }  
}); 

или для предварительного 1,4:

jQuery('<div/>')  
   .attr('id', 'foo')  
   .css({  
       fontWeight: 700,  
       color: 'green'  
   })  
   .click(function(){  
       alert('Foo has been clicked!');  
   });  

Я также делал подобные вещи в C # порождающие WPF в коде:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
Ответил 22/01/2010 в 21:46
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more