¿Cuál es la necesidad de DAO Architecture?

Cuando se programa en Java, ¿siempre es necesario codificar de acuerdo con la arquitectura DAO? Si es así, ¿cuáles son las ventajas de usarlo?

Estoy haciendo un proyecto que tiene un diagrama de clases como el siguiente. ¿Cuáles son las desventajas de esto?

Clase de entidad:

private void fillSONumber() {
    try {
        ZnAlSalesOrder o = new ZnAlSalesOrder();
        ArrayList a = o.getPendingSalesOrderIDs();
        for (int i = 0; i < a.size(); i++) {
            cmbSoNo.addItem(a.get(i));
        }
        o.close();
    } catch (Terminated ex) {

    }
}

Ejemplo de clase EntityTable:

public ResultSet select(String fields, String selection) {
    db = new Database();
    db.select("SELECT " + fields + " FROM " + name + " WHERE " + selection);
    return rs = db.rs;
}

y la clase de base de datos realiza el establecimiento y la destrucción de la conexión.

Respuestas a la pregunta(4)

Su respuesta a la pregunta