2010-12-26 2 views
1

私の最初のプロジェクトは、私の書籍(ライブラリがもっとシンプルなものに似ています)を追跡するためのプログラム(最終的に私はGUIインタフェースを作成する必要がありますが、現在はCLIがあります)です。 私はすべての本の挿入、更新、削除、表示、更新、検索(名前または著者または日付で)ができる必要があります。Javaでの個人的なプロジェクト、どのようにデータベースへのアクセスに近づく?

デザインについては、上記のすべてをdbに接続してデータを取得するメソッドとして持つ1つのメインクラスライブラリを考えていました。

この方法は問題ありませんか?私はそれが簡単だと気づいていますが、それは私の最初の本当のプロジェクトです。私は少しのフィードバックを感謝します。

また、デザインパターンとデータベース設計について読んでみるのは時期尚早ですか?

+0

"JavaとDBの相互作用を伴う個人図書館プロジェクト"のような、より重要なタイトルをお勧めします。 – bluish

答えて

0

データベースへのオブジェクト指向インターフェイスを使用するためのツールであるHibernateを使用することをお勧めします。あなたのプロジェクトには、DBエンティティといくつかのXML設定とマッピングファイルに対応するBeanクラスのグループがあります。また、DBから自動的にこのクラスとXMLを作成するリバースエンジニアリングツールもあります。つまり、エンティティ・リレーションシップ・スキームから始めてDBを設計し、それを作成し、Eclipse内でHibernateをインストールし、Hibernateのリバース・エンジニアリングを実行してから、プログラムの設計を開始します(まず紙面に、その後コードで行います) ;この方法で後で多くの煩わしさを避けることができます)。

ハイバーネーションは、高度なツールです。このプログラムをJavaやDBへのアクセスを学ぶ練習として書くのであれば、基本(JDBCなど)から始める方が良いでしょう。

とにかく、すでに書籍を管理するためのプログラムがたくさんあると確信しています。個人的に私は書籍を管理し交換することができるソーシャルネットワークanobii.comを優先します!しかし、あなたのプログラムはエクササイズだと思います。

+0

私はこれを提案しません...休止状態は非常に急な学習曲線を持っています。私は初心者が最初のプロジェクトに行くべきだとは思わないものです。むしろMybatisまたはそれに類するもののために行ってください。 – Paul

1

あなたは少なくともクラスブックを必要とします - あなたのライブラリインターフェイスは他にどのように見えるか想像するのは難しいです。クラスの代わりにライブラリインターフェイスを作成して、ストレージ用の複数の実装を持つことができるようにすることをお勧めします。今はDBを使用したいので、XMLを突然使用することができます。また、Libraryクラスmainを作成せず、別のLibraryCLIクラスを作成することをお勧めします。その後、LibraryGUIを追加するには、後でLibraryクラス自体を何もする必要がありません。分離は常に良いです。

いいえ、デザインパターンを読むのは早すぎることはありません。すぐにこれらのことを理解し始めるほど良いでしょう。それ以外の場合は、使用できないコードとメンテナンス不可能なコードで終了します。とにかくおそらく少しだけで終わるでしょう。少なくとも実装する前に、どうやってやるかを考えていれば、修正するほうがずっと簡単でしょう。

-3

静的メソッドを使用する代わりに、デザインパターンを使用する方が良い考えです。

+0

良い考えではありません。私はSQL注入などの臭いがあります。結果セットを返す「選択」メソッドやPreparedステートメントなどのスコープを失うことは気にしないでください。 – Paul

+0

静的な接続はトラブルのレシピです。また、パブリックメソッドを介して 'ResultSet'を渡すことは、トラブルのレシピです。 – BalusC

+0

はい、静的を使用すると問題が発生する可能性があります – Jaguar

5

DAO (Data Access Object)パターンを検索したいとします。

まず、1つの書籍(エンティティとも呼ばれます)を表すJavabeanクラスを作成します。

public class Book { 

    private Long id; 
    private String title; 
    private String author; 
    private Date date; 

    // Add/generate c'tor/getter/setter/hashcode/equals/tostring boilerplate. 
} 

次に、本の操作を行うDAOクラスを作成します。

public class BookDAO { 

    public Book find(Long id) throws SQLException { 
     // ... 
    } 

    public List<Book> search(Book example) throws SQLException { 
     // ... 
    } 

    public List<Book> list() throws SQLException { 
     // ... 
    } 

    public List<Book> listByDate(Date before, Date after) throws SQLException { 
     // ... 
    } 

    public void save(Book book) throws SQLException { 
     // ... 
    } 

    public void delete(Book book) throws SQLException { 
     // ... 
    } 

} 

このクラスでは、必要なJDBC定型文をすべて記述することができます。あなたは、基本的なキックオフ例hereで詳細な記事を見つけることができ

Book newBook = new Book("Pro JPA 2", "Merrick Schincariol"); 
bookDAO.save(newBook); 
// ... 
Book book = bookDAO.find(1L); 
// ... 
List<Book> allBooks = bookDAO.list(); 
// ... 
List<Book> matchingBooks = bookDAO.search(new Book(null, "Schincariol")); 
// ... 

最後に、あなたはそれに次のような方法を使用して終了します。


ステップをさらに取得するには、興味深いJPA(れるJava Persistence API)を見つけることがあります。 JDBC上に余分なレイヤーを追加するので、すべてのJDBC定型文を記述する必要はなく、よりオブジェクト指向の方法でDBと対話できます。確かに、それはJava EEの一部ですが、あなたはそれを独立して使用することもできます。デスクトップ/クライアントアプリケーションでJPAを使用する場合は、this tutorialも参照してください。

1

あなたの小さな個人的なアプリケーションでは過度のことかもしれませんが、3段階アプローチを考えてみてください。 n階層アーキテクチャでは、データ管理は論理的に異なるレイヤーに分かれています。たとえば、3層は、一般的にはUI -> Business Logic -> Data Accessです。

各レイヤーは、そのレイヤーの下にあるレイヤーのみを認識します。 UIはビジネスレイヤーを呼び出します。ビジネスレイヤーは、最終的にデータベースに照会するデータアクセスレイヤーを呼び出します。また、これらのレイヤー自体が多層化されていることが一般的です。

UI => Business Logic => Service => DAO

で:例えば、それはそうあなたのアーキテクチャは次のようになり、DAOデザインパターンを使用するだけでなく、さらにDAO層を抽象化するサービス層を使用することが一般的に良い習慣だと、おそらく追加のビジネスロジックを実行しますあなたのケースでは、あなたのドメインモデルはかなり簡単です。 1つのドメインエンティティ、ブックがあります。これは唯一の永続クラスです。再び、HibernateのようなORMフレームワークは過度のものかもしれませんが、これは非常に便利なツールです。データの永続性が非常に簡単になるので、これは価値があるかもしれません。

関連する問題