8

MVC フレームワークに関しては、静的メソッドまたはインスタンス メソッドを使用する必要がありますか?

たとえば、クラスと、クラスを返すUsersメソッドがあるとします。どちらを選択するのがよいでしょうか?getUserById()User

Users users = new Users();
User ret = users.getUserById(123);

また

User ret = Users.getUserById(123);

class にインスタンス変数がないと仮定しますUsers。どちらを選択するのが適切ですか?

4

3 に答える 3

2

断固としていいえ。実際には、DAO (Data Access Object) パターンを確認する必要があります。

モデル クラス自体は、あるロジック インスタンスから別のロジック インスタンスに情報を転送することのみを担当し、geter メソッドと setter メソッドのみを含める必要があります。

DAO クラスは、データ ソース (データベース) からの情報の更新または取得の保存を担当します。DAO パターンの例を次に示します。

public class BookDAO {

  private PreparedStatement saveStmt;
  private PreparedStatement loadStmt;

  public DBBookDAO(String url, String user, String pw) {
    Connection con = DriverManager.getConnection(url, user, pw);
    saveStmt = con.prepareStatement("INSERT INTO books(isbn, title, author) "
                                   +"VALUES (?, ?, ?)");
    loadStmt = con.prepareStatement("SELECT isbn, title, author FROM books "
                                   +"WHERE isbn = ?");
  }

  public Book loadBook(String isbn) {
    Book b = new Book();
    loadStmt.setString(1, isbn);
    ResultSet result = loadStmt.executeQuery();
    if (!result.next()) return null;

    b.setIsbn(result.getString("isbn"));
    b.setTitle(result.getString("title"));
    b.setAuthor(result.getString("author"));
    return b;
  }

  public void saveBook(Book b) {
    saveStmt.setString(1, b.getIsbn());
    saveStmt.setString(2, b.getTitle());
    saveStmt.setString(3, b.getAuthor());
    saveStmt.executeUpdate();
  }
}
于 2013-04-28T09:17:35.357 に答える
1

User クラスと、たとえば Product クラスがあり、そこに ID を持つオブジェクトがある場合は、'User' と 'Category' を拡張して、$id を受け取る 1 つの 'getById' メソッドを持つことをお勧めします。実行されます。

このようにして、2 つの異なるタイプのオブジェクトで同じメソッドを使用できます。

この例が意味をなすことを願っています:

class User extends SuperClass {
    public function getTableName() {
        return 'table_name_for_user';
    }
    public function getPK() {
        return 'primary_key_for_user';
    }
}

class Category extends SuperClass {
    public function getTableName() {
        return 'table_name_for_category';
    }
    public function getPK() {
        return 'primary_key_for_category';
    }
}

class SuperClass {
    public function getById($id) {
        $query = $this->db->query("SELECT * FROM " . $this->getTableName() . " WHERE " . $this->getPK() . " = $id");
        return $query->result();
    }
}
于 2013-04-28T09:06:21.507 に答える