2013-06-11 20 views

Odpowiedz

10

Głównym powodem, dla którego chcesz zastosować kontrakty do metod prywatnych jest jeśli korzystając z analizy statycznej. Często piszesz kod, który zawiera domyślne założenia dotyczące twoich prywatnych metod (ta metoda nigdy nie zwróci wartości null, na przykład), a statyczne polecenie wskaże ci to. Możesz wtedy albo umieścić założenie w treści publicznej metody, albo dodać ją jako kontrakt na metodę prywatną. Ta ostatnia jest generalnie czystsza, ponieważ pozwala ponownie wykorzystać założenia implikowane umową przez wiele zastosowań tej prywatnej metody.

Osobiście zrezygnowałem z umów kodowych, dopóki nie zyska więcej szansy na dojrzewanie. Składnia jest niezręczna (naprawdę potrzebujemy prostej reprezentacji w szczególności dla parametrów, które nie są zerowalne) i możesz przejść przez wiele zawirowań, próbując udowodnić statycznie skomplikowane systemy. Jest to bardzo dobry pomysł i myślę, że to tylko kwestia czasu, zanim poprawne wsparcie kontraktowe dla wyrafinowanej analizy statycznej zostanie wypalone w .NET (rzeczywiste metadane CIL), z obsługą języka natywnego w języku C#, a nie przykręcone jako niezręczne rozszerzenie .

Jedną z korzyści jest to, że uważam, że bardzo cenne jest przechodzenie przez proces składania umów do niewielkiej aplikacji, od góry do dołu, w tym metod prywatnych i publicznych. Podczas pracy nad procesem, w którym wszystko się udowadnia, ujawnia wiele ukrytych założeń, które robisz każdego dnia, nawet nie zdając sobie z tego sprawy. Często odkrywasz także przypadki niepowodzeń, których nigdy nie brałeś pod uwagę, ponieważ nastawienie, które kultywujesz podczas projektowania kontraktów, podkreśla punkty, w których robisz założenia i zachęca cię do rozważenia, czy twoje założenia mogą być czasem naruszane. Nie mam harmonogramu, aby to zrobić na moich codziennych zajęciach, ale zdecydowanie nauczyłem się wiele od okresu, w którym eksperymentowałem z Code Contracts.

+0

Dzięki, jest to bardzo pomocne. –

1

Umowy są zwykle sprawdzane tylko przed/po publicznych metodach. Prywatne metody są wywoływane tylko jako część połączenia z publiczną metodą, więc nie muszą być sprawdzane osobno.

http://en.wikipedia.org/wiki/Class_invariant

Powiązane problemy