Mój zespół tworzy wiele jednorazowych formularzy internetowych. Większość z tych formularzy po prostu wysyła wiadomość e-mail, a kilka z nich wykonuje prosty zapis do bazy danych.
W tej chwili każda forma ma osobne rozwiązanie w Visual Studio Team Foundation Server. Oznacza to, że mamy blisko 100 różnych projektów, co utrudnia utrzymanie spójności. Każda forma jest wyjątkowa, ponieważ pola są różne, ale wszystkie robią prawie to samo.
Chcę je jakoś skondensować i naprawdę mogę skorzystać z pewnych wskazówek.
- Czy powinienem spróbować utworzyć jeden plik rozwiązania zawierający wszystkie nasze projekty formularzy? Nie ma dużo kodu hydraulicznego, chociaż mógłbym stworzyć kilka klas pomocników, aby pomóc w formatowaniu wiadomości e-mail i tym podobnych. Bardzo pomocne byłoby współdzielenie CSS, JavaScript, elementów sterujących i obrazów między projektami.
- Biorąc pod uwagę, że jesteśmy sklepem Microsoft, czy istnieją jakieś wymierne korzyści z korzystania z czegoś takiego jak MVC zamiast formularzy internetowych w tym konkretnym scenariuszu? Sprzedano mi koncepcję MVC jako całości, ale czy pomogłoby mi to zebrać 15-polowy formularz do gromadzenia danych bardziej efektywnie, gdyby wystarczyło wysłać wiadomość e-mail? Formularz, który zmusił mnie do myślenia o tym, zawiera sporo logiki do wyświetlania i ukrywania pól w oparciu o odpowiedzi użytkownika i wydaje się, że byłoby mniej wydajne korzystanie z MVC i jQuery.
design
refactoring
Josh Earl
źródło
źródło
Odpowiedzi:
Bezpieczne przefakturowanie bez testów jest trudne i obarczone niebezpieczeństwem.
Zacznę od:
Pisanie przypadków testowych, które obejmują różne typy danych wejściowych do tych formularzy i oczekiwany wynik. Wygląda na to, że tak naprawdę nie potrwa to zbyt długo, ponieważ wydaje ci się, że większość z tych form ma identyczną funkcjonalność lub jest blisko niej.
Uruchom te przypadki testowe dla około 100 formularzy (włącz pokrycie kodu, aby pomóc w śledzeniu ścieżek kodu).
Następnie możesz sprawdzić, co możesz bezpiecznie zmienić na czynniki, a następnie możesz (przykład):
Uruchom narzędzie do wykrywania duplikacji kodu (nie wiesz, jak się nazywa w .NET, w Javie mamy CPD). Natychmiast usuń 13 identycznych formularzy. Teraz ponownie uruchom testy - Tak! Wszystkie zdają oprócz formularza 11, OK, więc nie możemy tego jeszcze usunąć.
Usuń cały lokalny kod formatowania wiadomości e-mail i uzyskaj wszystkie formularze, aby wywołać wspólny moduł przetwarzania wiadomości e-mail. Uruchom testy, wszystkie zdają oprócz jednego, hhmmm OK .... Znaki UTF-8, napraw to w module ogólnym, uruchom ponownie testy, tak, wszyscy jesteśmy dobrzy!
wypłukać i powtórzyć.
źródło
Proponuję wyodrębnić część przesłania. Używając Modelu / Widoku / Kontrolera, umieść formularze w Widoku i niech używają tego samego kontrolera. Ten kontroler może albo wykonać ogólną akcję, na przykład wysłać wiadomość e-mail na domyślny adres, albo przekierować dane formularza do kontrolera, który może. W ten sposób wszystko, co musisz zrobić, aby utworzyć nowy formularz, to utworzyć formularz i skierować dane wyjściowe do tego kontrolera. Ta archetektura może być zawarta w jednym projekcie, który pozwoliłby ci udostępniać CSS i javascript, jak wspomniałeś.
Aby poradzić sobie z formatowaniem wiadomości e-mail, zacznę od utworzenia ogólnego formatyzatora, na przykład takiego, który po prostu wyświetla nazwy i wartości elementów formularza, a także inne typy metdanych, takie jak czas przesłany itp. Możesz to zrobić tak fantazyjnie, jak chcesz . Następnie, jeśli naprawdę potrzebujesz więcej niestandardowej obsługi, dodaj fabrykę. Fabryka zwróci interfejs formatyzatora. Następnie w fabryce możesz wyszukać formatyzator dla tej konkretnej formy lub zwrócić tę ogólną, jeśli nie istnieje. Ten projekt ułatwiłby również testowanie jednostkowe kontrolera, ponieważ można łatwo dostarczyć próbny formatator do celów testowych.
Nawiasem mówiąc, nie podałbym adresu e-mail jako argumentu z formularza. Jeśli chcesz wysłać na wiele adresów, sugeruję utworzenie tabeli przeglądowej, która zawiera wszystkie formularze i e-mail, na który chcesz je wysłać. Można to zaimplementować w XML lub w kodzie (widziałem oba, choć nie jestem pewien, czy jedno z nich jest lepsze). Pomoże to uniknąć spamerom uzyskiwania adresów e-mail ze strony formularza.
źródło