2010-04-27 32 views
5

Gdybyśmy mieli zdefiniowaną hierarchię w aplikacji. Jak na przykład w przypadku architektury trójwarstwowej, w jaki sposób ograniczamy kolejnych programistów przed naruszeniem norm?Ogranicz naruszenie zasad architektury - asp.net MVP

Dla przykładu, w przypadku architektury MVP (nie asp.net MVC) prezenter powinien zawsze wiązać model i widok. Pomaga to w pisaniu odpowiednich programów testów jednostkowych. Mieliśmy jednak przypadki, w których ludzie bezpośrednio zaimportowali model w widoku i nazwali funkcje naruszające normy, a zatem przypadki testowe nie mogły zostać poprawnie napisane.

Czy istnieje sposób, aby ograniczyć, które klasy mogą dziedziczyć z zestawu klas? Patrzę na różne możliwości, w tym na przyjmowanie odmiennych wzorców projektowych, jednak nowe podejście powinno być warte zmiany kodu.

Odpowiedz

2

Obawiam się, że to niemożliwe. Próbowaliśmy to osiągnąć za pomocą atrybutów i nie udało nam się. Możesz odwołać się do mojego past post on SO.

Najlepsze co możesz zrobić, to sprawdzać swoje złożenia za pomocą NDepend. NDepend pokazuje diagram zależności złożenia w projekcie i możesz od razu śledzić naruszenia i podejmować działania w sposób reaktywny.

alt text http://www.ndepend.com/Res/NDependBig17.png

+0

@this .__ curious_geek: dzięki za skierowanie mnie do NDepend. Sprawdzę to. Cool nick btw .. –

+0

Proszę o odpowiedź na http://stackoverflow.com/questions/8851933/event-bubbling-and-mvp-asp-net? – Lijo

0

Chcesz rozwiązać problem z oprogramowaniem? Przygotuj się na świat bólu!

Sposobem na rozwiązanie problemu jest upewnienie się, że masz sposoby pracy z ludźmi, które nie kończą się takimi problemami ... Parowanie Programowanie/Recenzja. Indukowanie ludzi przy pierwszym wejściu do projektu itp.

Powiedziawszy to, możesz napisać narzędzia analizujące oprogramowanie i szukające wspólnych problemów. Ale ludzie są dość kreatywni i mogą znaleźć różne dziwne sposoby robienia rzeczy.

+0

Ohh Czuję ból w porządku !!! Miałem nadzieję, że wbrew nadziei, jeśli istnieje jakiś szkielet/narzędzie, które może analizować/zatwierdzać niektóre zasady architektury Chyba nie ma skrótów do recenzji, co? –

+0

cóż, oddzielając złożenia i sprawiając, że widok jest całkowicie niezależny od modelu, więc prezenter udostępnia wszystkie obiekty, z którymi patrzy dany widok, i może zweryfikować, że widok nie korzysta z modelu. Ale to więcej bólu niż jego wartości. Przeważnie. –

+0

ale to prawdopodobnie po prostu poruszy twój problem gdzieś indziej .... wprowadzaj więcej szkoleń dotyczących pracy w stylu architektury, który masz –

0

Zaraz po tym, jak wszystko zostanie zablokowane zgodnie z twoją satysfakcją, pojawią się nowe wymagania i będziesz musiał przebić się przez niego.

Egzekwowanie takiej rygorystyczności na poziomie programowania .NET jest prawie niemożliwe, biorąc pod uwagę, że programista może uzyskać dostęp do wszystkich prywatnych członków poprzez odbicie.

Zrób sobie przysługę i zaplanuj regularne przeglądy kodu, zapewnij edukację i wykonaj odpowiednie szkolenia. I, jak powiedziałeś, stanie się to szybko oczywiste, kiedy nie będziesz mógł pisać testów jednostkowych przeciwko niemu.

1

Minęło prawie 3 lat od napisałem to pytanie. Muszę powiedzieć, że próbowałem odkryć to, pomimo błyskotliwych odpowiedzi tutaj. Niektóre z lekcji nauczyłem do tej pory -

  1. Więcej zapachy kodu wyjdzie patrząc na konsumentów (testy jednostkowe są najlepszym miejscem do poszukiwania, jeśli je masz).

    • Liczba parametrów w konstruktorze jest bezpośrednim wskaźnikiem liczby zależności. Zbyt wiele zależności => Klasa robi zbyt wiele.
    • Ilość (publicznych) metod w klasie
    • Konfiguracja testów jednostkowych będzie prawie zawsze daje to precz
  2. Kod pogarsza się z biegiem czasu, chyba że istnieje skoncentrowany wysiłek, aby usunąć długu technicznego i refaktoryzacji . Jest to prawdą niezależnie od języka.

  3. Narzędzia mogą pomóc tylko w pewnym zakresie. Ale kombinacja narzędzi i testów często daje wystarczające wskazówki dotyczące różnych zapachów. Aby uchwycić je w odpowiednim czasie, trzeba trochę doświadczenia, szczególnie po to, aby zrozumieć znaczenie i wpływ każdego z nich.

Powiązane problemy