Може би най-доброто, което можете да направите, е да погледнете кодовата си база с поглед към принципа на единична отговорност . Една от основните причини, че автономният изглед (и winforms, който го насърчава) е толкова труден за тестване, е, че разработчиците са склонни да събират всичко заедно в манипулатор на събития.
Задайте този въпрос на SO - https://stackoverflow.com/questions/16599778/asp-net-mvc3-linq-make-multiple-related-rows-fields-in-a-1-to-many-relationshi, става въпрос за MVC3, но е пълна бъркотия - един метод, който е отговорен за конфигурирането на gridview, конфигурирането на отговора и извличането на данните за попълване на gridview. Трудно е дори да знаеш откъде да започнеш да отговаряш на въпроса, камо ли да напишеш някакви разумни (да се четат: кратки и бързи за изпълнение) тестове, за да се гарантира, че решението работи.
Ако можете внимателно да прегледате кода си и внимателно да капсулирате цялата бизнес логика и/или интеграционни точки в услуги/компоненти/интерфейси (и реализации), за предпочитане в отделни асембли отвън.
След като сте разделили цялата логика на отделни компоненти, всеки от които е фокусиран върху собствената си загриженост, можете да пишете тестове след това, за да се уверите, че изпълняват задачата, за която са предназначени, без да се налага да тествате която и да е друга част от вашето приложение, това ще бъдат вашите услуги. Искате да стреляте за всеки тип услуга да бъде интерфейс, подкрепен от внедряване.
След като сте написали и тествали всички тези различни проекти и сборки, вие ги въвеждате обратно в приложението си, като използвате инверсия на контрол (форма на инжектиране на зависимост). Това допълнително отделя потребителския ви интерфейс от различните бизнес логики, които вашето приложение трябва да изпълнява. Мечтата тук е, че ще стигнете до място, където, когато сте готови да пренапишете потребителския интерфейс, можете да използвате повторно компонентите на бизнес логиката, които вече са написани и тествани.
Мисля, че класът winform ще има конструктор, който приема много аргументи (комбинация от различните услуги, обсъдени по-горе). DI рамката ще отговаря за предоставянето на услугите на класа winform. След това в идеалния случай вашите манипулатори на събития winforms ще бъдат сравнително малки, просто извикващи сервизни методи със стойности на параметри, събрани от различните полета на формуляра.
Ето публикация за използването на Castle Windsor (рамка за инжектиране на зависимости ) с winforms: Използване на Castle.Windsor с приложения на Windows Forms. Има много различни DI рамки, използвам Castle Windsor, защото това е тази, която научих първи, всички те правят по същество едно и също нещо, така че всичко, което трябва да направите, е да намерите тази, която ви харесва.
Ето урок за разделяне на проблеми, което е базирано на уеб приложение, но трябва да бъде поучително как да се идентифицират и преработят услуги от съществуващо приложение за „кухненска мивка“.
Този отговор се превръща в книга и всичко е много абстрактно. Основното нещо е, че трябва да мислите за приложението като набор от лего блокове, които комбинирате, за да създадете функционалност (всеки блок е проблем), а потребителският интерфейс е просто лепилото, което държи блоковете заедно (тази аналогия не е перфектна) .
Наистина, това е повече изкуство, отколкото наука, но можете да тренирате ума си да гледа на проблемите по този начин и след като го направите, програмирането като цяло става много по-лесно. Завоят е малко стръмен, но продължавайте и ще стигнете.
person
Jason
schedule
17.05.2013