13

W moim ostatnim projekcie użyliśmy MSBuild jako języka skryptowego. (tak, naprawdę!) Napisaliśmy również setki niestandardowych zadań MSBuild, dla części, które miały więcej sensu w języku C#. (Nawet napisałem zadanie MSBuild, aby wygenerować kod na płycie głównej dla zadania MSBuild.) Tak, zużyło się.)Jaki jest najlepszy sposób zarządzania drzewem zależności w .NET?

Chociaż nie polecam nikomu innego podejścia, to jedną z rzeczy, które uważam za bardzo pomocne, było wbudowane zarządzanie zależnościami. Jak można się było spodziewać, łatwo było wyrazić zależności zależności i pozwolić MSBuildowi zadbać o ich zaspokojenie. Na przykład prawie każdy krok naszego oprogramowania wymagał skopiowania określonego zestawu plików do określonej lokalizacji. Można łatwo napisać:

Step1: CopyFiles 
Step2: CopyFiles, Step1 

i kiedy wykonać Step2, byłoby skopiować tylko pliki raz.

Budowanie i zaspokajanie drzewa zależności jest dość powszechne w oprogramowaniu. Chciałbym, aby zespół MSBuild przyjął kod zarządzania zależnościami, oddzielił go od MSBuild i przeniósł go do .NET Framework, gdzie każdy może z niego korzystać. Odrzucając to, , co według Ciebie jest najlepszym rozwiązaniem do zarządzania zależnościami w ten sposób?

Odpowiedz

5

Myślę, że można użyć kontenera IOC, takiego jak Spring, aby uzyskać takie zachowanie.

Wywołaj dowolne zadanie, które musi zostać uruchomione tylko raz jako pojedyncza operacja i zlecić temu obiektowi zadanie konstruktora obiektu zadania. Następnie każdy obiekt, który pojawi się później z zależnością od tego zadania, otrzyma odwołanie do zadania, które już zostało uruchomione i będzie w stanie uzyskać wyniki tego zadania lub będzie w stanie wywnioskować, że to zadanie zostało już pomyślnie uruchomione.

W konfiguracji wiosennej pojawi się wiele powiązanych ze sobą zadań, z których każdy odwołuje się do innych zadań w jego konfiguracji konstruktora. To podejście jest najbardziej elastyczne i nie ogranicza się do "zadań" ani niczego zbyt ciężkiego.

Zgaduję, że jakakolwiek biblioteka workflow ma podobne koncepcje. Ale tak naprawdę nie znam tych.

Myślę, że dla czegoś mniejszego, ludzie muszą po prostu przetasować swój własny wykres obiektów i interfejs, używając wzorca odwiedzającego i być może Słownika do utrzymania stanu.

1

Proszę spojrzeć na projekt Refix na CodePlex. To oznacza REFERIX FIX i działa bardzo ładnie.

Powiązane problemy