Heim  >  Artikel  >  Java  >  Neue Java-Bewegung: Testgetriebene Entwicklung 3 – Benutzerregistrierung 3

Neue Java-Bewegung: Testgetriebene Entwicklung 3 – Benutzerregistrierung 3

黄舟
黄舟Original
2016-12-30 13:15:081177Durchsuche

Auf die inhaltliche Frage der Benutzerregistrierung, also der Aufnahme von Benutzern in die Datenbank, haben wir uns bislang noch nicht eingelassen. Beschäftigen wir uns nun mit dieser Anforderung.

Zunächst müssen Sie die für den Datenbankzugriff verwendete Technologie bestimmen. Hier können Sie zwischen Hibernate, JPA oder JDBC wählen. Ich glaube, dass die meisten Anwendungen Hibernate als Datenbankzugriffstechnologie verwenden. Andere entscheiden sich vielleicht für JPA, aber wir entscheiden uns hier für JDBC. Der Grund ist relativ einfach. Die zugrunde liegenden Dinge scheinen komplizierter zu sein, aber sobald sie gemeistert sind, ist sie aufgrund ihres geringeren Inhalts relativ einfacher zu meistern. Dieses O-R-Mapping-Modell fügt viele abstrakte Konzepte und Details hinzu. Wir betrachten normalerweise nur die Spitze des Eisbergs. Wenn Sie die Dinge unter dem Eisberg beherrschen möchten, ist die Schwierigkeit um mehrere Größenordnungen schwieriger als die direkte Beherrschung von JDBC.

Darüber hinaus können wir aufgrund unserer testgetriebenen Entwicklungsarchitektur den vorhandenen Code umgestalten, wenn wir ihn auf andere Architekturen umstellen möchten. Unter der Garantie von Testfällen können wir den Code sicher ändern.

Okay, verwenden wir zunächst den DAO-Modus, um die Datenbankzugriffsschnittstellenklasse UserDao zu definieren. Der Code lautet wie folgt:

public interface UserDao {  
    public long registerUser(Map<String, Object> userInfo);  
}

Im Allgemeinen verwenden wir die MySQL-Datenbank, also definieren wir Die Implementierung der Dao-Klasse UserMysqlDao lautet wie folgt:

public class UserMysqlDao implements UserDao {  
    @Override  
    public long registerUser(Map<String, Object> userInfo) {  
        // TODO Auto-generated method stub  
        return 0;  
    }

Natürlich möchten wir nicht, dass der Benutzer die verwendete Datenbank ermittelt und dann die entsprechende Implementierungsklasse instanziiert Sie müssen den Factory-Modus übernehmen und die DaoFactory-Klasse einführen. Der Code lautet wie folgt:

public class DaoFactory {  
    public static UserDao getUserDao() {  
        UserDao dao = null;  
        switch (dbms) {  
        case "mysql":  
            dao = new UserMysqlDao();  
            break;  
        }  
        return dao;  
    }  
      
    public static String getDbms() {  
        return dbms;  
    }  
  
    public static void setDbms(String dbms) {  
        DaoFactory.dbms = dbms;  
    }  
  
    private static String dbms = "mysql";  
}

Wie aus dem obigen Code ersichtlich ist, muss der Aufrufer nur DaoFactory.getUserDao() aufrufen, um die Implementierung zu erhalten Klasse.

Das Folgende ist das Problem der Datenbankverbindung. Wir hoffen, den Datenbankverbindungspool bei der Ausführung auf Anwendungsservern wie Jboss zu verwenden und DriverManager beim Unit-Testen zu verwenden. Daher müssen wir eine DataSource-Kapselungsklasse für JdbcDs definieren Behandeln Sie die obige Situation. Der Code sieht folgendermaßen aus:

public class JdbcDs {	
	public static Connection getConnection() throws SQLException {
		Connection conn = null;
		if (iDebug <= 0) {
			conn = appDs.getConnection();
		} else {
			try {
				Class.forName("com.mysql.jdbc.Driver").newInstance();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Properties connectionProps = new Properties();
		    connectionProps.put("user", "root");
		    connectionProps.put("password", "yantao");
		    conn = DriverManager.getConnection(
	                   "jdbc:" + "mysql" + "://" +
	                   "localhost" +
	                   ":" + 3306 + "/XrcjDb",
	                   connectionProps);
		}
		return conn;
	}

	public static int iDebug = 1;
	public final static String APP_DS = "java:jboss/datasources/XcgDS";
	private static DataSource appDs = null; 
	static{
		if (null == appDs) {
			Properties env = new Properties();
			try {
				InitialContext ictx = new InitialContext(env);
				appDs = (DataSource)ictx.lookup(APP_DS);
			} catch (NamingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}
	
}

Wenn Sie Unit-Tests durchführen, setzen Sie iDebug einfach auf 1. Andernfalls wird der Datenbankverbindungspool verwendet.

Nachdem alle Vorbereitungsarbeiten abgeschlossen sind, kann die Entwicklung der Datenbankfunktion offiziell durchgeführt werden.

Das Obige ist der Inhalt der neuen Java-Bewegung: Testgetriebene Entwicklung 3 --- Benutzerregistrierung 3. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn