Obecnie pracuję nad małą strukturą sztucznej inteligencji (algorytmy genetyczne/sieci neuronowe) w języku C# dla projektu uniwersyteckiego.Jak zapewniasz algorytmiczny kod w .NET?
Moim pierwszym zmartwieniem jest opracowanie ram wielokrotnego użytku, więc projektuję wszystko, aby było całkiem modularne. Wiem, że płacę za to cenę (wydajność), ale czuję, że mam więcej do zyskania niż do stracenia (najlepiej dwa razy wolniej niż stracić dwa razy tyle czasu później, próbując znaleźć niemożliwe znajduj błędy i tracisz mnóstwo czasu, próbując dodać nowe rzeczy, które trudno jest wprowadzić w monolitycznym bloku kodu).
Chciałbym mieć wiele kontroli na różnych częściach mojego kodu, asercje, w zasadzie. Sprawdź, czy przy uruchomieniu metody XI rzeczywiście jestem w poprawnym stanie itd. Tego rodzaju twierdzenia są przydatne przy opracowywaniu, ale chciałbym, żeby trzymali się z daleka od kodu wydania (to znaczy, gdy zdecyduję, że będę chciał opuścić to działa na noc, aby uzyskać moje końcowe wyniki badań).
widzę kilka sposobów osiągnięcia tego:
- System.Diagonists.Assert rodzinę metod.
- Code Contracts
- Mając if (x), a następnie wyrzucić InvalidStateException() otoczoną #if DEBUG/#endif
Jak to zrobić i dlaczego?
Jestem również świadomy testów jednostkowych (używam ich), ale chciałbym też mieć pewne twierdzenia na temat kodu.
Czy umowy z kodeksem nie działają w podobny sposób? Wpadłem na pomysł, że możesz je całkowicie wyłączyć w trybie Release lub coś podobnego. –
Może. Szczerze, nie znam tego. Technika w mojej odpowiedzi to ta, której używam, więc pomyślałem, że ją podzielę. Nie mogę powiedzieć, czy jest lepiej, czy gorzej niż umowy kodowe. – cdhowie
Pójdę z tym, co mówi cdhowie. umowa na kod oferuje o wiele więcej, ale prawdopodobnie nie to, czego potrzebujesz w twoim przypadku. Tak więc myślę, że właściwym narzędziem jest użycie metod ozdobionych atrybutem warunkowym, a nie wbudowanym # jeśli, # else lub Debug.Asset() zaśmieca twój kod w linii. –