Имаме ли нужда от сборките Rx System.Reactive.*?

Тези дни се опитвах да програмирам с Rx.

Сега всеки път, когато започвам програмирането с него, стигам до въпроса дали наистина имам нужда от външни SDK библиотеки като System.Reactive.* сборки. Както винаги, искам да програмирам с помощта на Rx, трябва да използвам observable: IObservable, IObserver и т.н., но те вече са налични в асемблира mscorlib.

Така че защо трябва да изтегля тези реактивни модули и да добавям препратки към тях?


person King    schedule 16.02.2014    source източник
comment
BCL дефинира интерфейсите IObserver<T> и IObservable<T>, но библиотеките System.Reactive включват класове, които ги прилагат, заедно с linq разширения и методи за конвертиране към/от задачи и събития.   -  person Lee    schedule 16.02.2014
comment
Благодаря Лий за отговора. Сега мога ли да програмирам с Rx, без да използвам тези библиотеки? Или някъде наистина ще ми трябват тези?   -  person King    schedule 16.02.2014
comment
Rx библиотеката дефинира всички linq комбинатори като Select, Where, SelectMany и т.н., които са мощен начин за справяне с потоци от събития. Ако имате работа с наблюдатели и наблюдаеми, определено бих ви препоръчал да използвате Rx, в противен случай ще трябва да дефинирате свои собствени реализации на интерфейсите и работата с тях ще бъде тромава.   -  person Lee    schedule 16.02.2014


Отговори (1)


Както каза Лий, библиотеките на базовия клас включват само основните интерфейси IObserver<T> и IObservable<T>. Няма нищо друго от Rx в BCL.

За да направите нещо полезно с тях, трябва наистина да използвате библиотеката reactive-extensions (обикновено чрез включване на nuget пакет rx-main).

Въпреки че нищо не ви пречи да правите свои собствени имплементации, има толкова много тънкости в една добра имплементация, че мисля, че ще сте луди да го направите, когато Reactive Extensions са свършили толкова добра работа.

person James World    schedule 16.02.2014
comment
Благодаря на Джеймс и Лий за отговора. Все пак някой може ли да ми даде примери за такива методи за разширение, които се използват регресивно и са достъпни само чрез сборките system.reactive. Съжалявам, наистина съм начинаещ за Rx. - person King; 18.02.2014
comment

трябва да обвържете отново събитието за кликване, а не да използвате on:

$(document).ready(function(){

    var itemImages = $('.foo, .bar, .foobar, .barfoo');

    var setClick = function(){
        $(itemImages).click(function(){
            $(this).addClass("scaled");
            $(itemImages).addClass("blur");
            $(this).removeClass("blur");
            $(itemImages).off('click');
            $('.close').fadeIn('slow');
            $(this).on('click',itemClicked);
        });
    }
    $('.close').click(function(){
        $(itemImages).removeClass("scaled");
        $(itemImages).removeClass("blur");
        setClick();
        $(this).fadeOut('fast');
    });

    function itemClicked() {
        $(this).removeClass("scaled");
        $(itemImages).removeClass("blur");
        $(itemImages).on('click');
    }   
});
- person James World; 18.02.2014