Testgetriebene Entwicklung (TDD) ist eigentlich kein neues Konzept, aber das Wesen dieser Methodik wird oft missverstanden. In meinem Fall bedeutet testgetriebene Entwicklung meiner Meinung nach, Unit-Tests zu schreiben, um den Code vollständig zu testen. Tatsächlich ist dies eines der häufigsten Missverständnisse über testgetriebene Entwicklung. Bei der testgetriebenen Entwicklung steht nicht nur das Testen im Vordergrund, sondern auch die Antriebsentwicklung. Der Zweck des Schreibens von Testfällen ist nicht nur das Testen, sondern auch ein Design, ein Design von Funktionen und Schnittstellen sowie ein Design aus der Perspektive von Benutzern von Funktionen oder Schnittstellen, während das Design in anderen Methoden das Design aus der Perspektive eines Entwicklers ist Eine testgetriebene Entwicklung trägt eher dazu bei, gute Designs zu produzieren.
Aber das einfache Entwerfen durch Testen und Ausführen von Tests zur Sicherstellung der Codequalität reicht nicht aus, um qualitativ hochwertige Softwareprodukte zu produzieren. Bei der testgetriebenen Entwicklung wird auch Wert auf Refactoring gelegt, bei dem die unangemessenen Teile des Codes umgestaltet werden. Dieses Refactoring muss bei jedem Testschreib-, Entwicklungs- und Verifizierungsprozess durchgeführt werden, da es Testfälle gibt, die dies garantieren können Souveränes und mutiges Refactoring ohne Angst vor unbeabsichtigten Folgen.
Zurück in unserem Projekt, in MainServlet, haben wir die gesamte Geschäftslogik implementiert, aber wir werden bald erkennen, dass, wenn die gesamte Anwendungslogik in diese Klasse geschrieben wird, diese Klasse irgendwann zu einem Riesen wird nicht wartbar, daher müssen wir die Implementierung der Geschäftslogik für die Benutzerregistrierung in das Benutzermodul einfügen. Wie Sie sehen, haben wir mit dem Umbau unseres Systems begonnen.
Zuerst erstellen wir das Benutzerpaket und die UserMngr-Klasse unter diesem Paket, da wir davon ausgehen, dass das Benutzermodul neben der Pflege grundlegender Benutzerinformationen auch Benutzergruppen, Benutzerebenen, Benutzerpunkte und anderes verwalten muss Informationen Es ist nicht erforderlich, dass der Anrufer diese Details vollständig versteht. Daher verwenden wir hier den Fassadenmodus und alle Vorgänge für den Benutzer werden über UserMngr ausgeführt. Der Code lautet wie folgt:
public class UserMngr { public static long registerUser(Map<String, Object> userInfo) { return 101; } }
Wir sehen, dass wir in dieser Klasse nur einen Wert zurückgeben und nichts tun, um schnell zu überprüfen, ob unsere rekonstruierte Architektur später funktionieren kann. Außerdem müssen Sie auf die Parameterelemente achten. Hier wird das Map-Objekt verwendet, das heißt, die Parameter werden in einem Array ähnlich dem in PHP übergeben. In Java ist es üblicher, für diesen Zweck eine Wertobjektklasse zu entwerfen. Dies führt jedoch häufig dazu, dass viele Wertobjektklassen definiert werden, oder dass ein Wertobjekt aufgrund der Notwendigkeit der gemeinsamen Nutzung sehr groß ist. Hier wird Map zum Übergeben von Parametern verwendet , was solche Probleme überflüssig macht.
Fügen Sie den Code zum Aufrufen des Benutzermoduls im MainServlet unten hinzu:
private void registerUser(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String userName = null; if (request.getParameter("userName") != null) { userName = request.getParameter("userName"); } Map<String, Object> userInfo = new HashMap<String, Object>(); userInfo.put("userName", userName); long userId = UserMngr.registerUser(userInfo); Map<String, Object> model = new HashMap<String, Object>(); model.put("userId", "" + userId); request.setAttribute("model", model); /*this.getServletContext().getRequestDispatcher("/caporder/apply_capital.jsp") .forward(request, response);*/ }
Führen Sie den Testfall unten aus und er sollte erfolgreich sein. Dies beweist, dass meine Rekonstruktion der Architektur dieses Mal erfolgreich ist.
Das Obige ist der Inhalt der neuen Java-Bewegung: Testgetriebene Entwicklung 3 --- Benutzerregistrierung 2. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!