Кто-нибудь разрабатывает API или библиотечный код таким образом? - PullRequest
2 голосов
/ 22 января 2010

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

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

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

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() ;

У меня такой вопрос:
Кто-нибудь еще разрабатывает API, начиная с псевдокода, как этот?

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 22 января 2010

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

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

1 голос
/ 22 января 2010

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()
      }
   }
};
0 голосов
/ 22 января 2010

Я склонен начинать с пустых классов и методов. Это действительно вопрос сверху вниз против дизайна снизу вверх.

Я действительно предпочитаю набросок огромной доски.

0 голосов
/ 22 января 2010

Да, так устроен jQuery, он всегда заканчивается возвратом самого себя, так что вы можете связать методы таким образом.

...