0

今週の金曜日に「ソフトウェア エンジニアリング」の試験を受けなければならないのですが、ちょっと理解できないことがあり、先生は説明できません。

Boundary-Controller-Entity (BCE) パターンに基づいて、持続性 (データベースまたはシーケンシャル ファイルですが、SQLite を使用します) に基づいてプロジェクトを作成する必要があります。エンティティ クラスを保存/読み込みメソッドで実装する必要があります。これにより、データを永続化レイヤーに出し入れします。彼らはDAOを使用しています。

例えば:

public class someEntity
{
   private int someData;

   public void set_someData (int _someData) {this.someData = _someData;}
   public int  get_someData ()              {return this.someData;}

   public void save ()
   {
      DAO dao = new DAO ();

      dao.openConnection ();
      dao.insert (this.someData);
      dao.closeConnection ();
   }

これまでのところ、それはすべて明らかです。

「ロード」メソッドを実装するとき、検索パラメーター (DB の主キー) を使用して、エンティティ インスタンスにデータベースのデータを「入力」したいと考えています。しかし、たとえば、1980 年以前に生まれたすべての人を取得したい場合、どうすればよいでしょうか?

私の心の唯一の解決策は、コントローラークラスに以下を実装することです

ArrayList <people> pList= new ArrayList ();
people p;

for (int i = 1900 ; i < 1980 ; i++)
{
  p = new people ();

  if (p.load (i) == true); //returns true if has found corresponding entry in db
  {
     pList.add(i);
  }
}

これは完全に正気ではありませんね。

したがって、コレクションを返す「ローダー」メソッドが必要です。そのため、簡単な SQL クエリを使用して、1980 年より前に生まれたすべての人を返すメソッドを DAO に実装できます。これは、コントロール クラスが BCE パターン ルールを無視して DAO と直接対話する場合にのみ実行できます。

それが本当の問題である場合、どうすれば問題を解決できますか?

4

2 に答える 2

0

私は解決策について考えてきました:

つまり、「従業員」エンティティがあり、「従業員」は「会社」で働いています。

これは次のように表すことができます。

public class company
{
  private String name;
  private int employee_amount;
  private ArrayList <employee> works;

  //setter, getters and save methods...

  public void load (String _name)
  {
     DAO dao = new DAO ();
     employee e;

     dao.openConnection ();
     works = dao.searchByCompany (_name);    
     dao.closeConnection ();

     this.name = _name;
     this.employee_amount = e.length ();
  }

DAO では、searchByCompany メソッドが実装されます。

public ArrayList <employee> searchByCompany (String name)
{
  ArrayList <employee> to_return = new ArrayList ();

  //stuff....

   rs = stmt.executeQuery ("SELECT * FROM Employees WHERE Company = '" + name + "'");

  //get rs fields and put everything into to_return

  return to_return;
}

したがって、80 年以前に生まれた有名人の従業員を検索する必要がある場合は、次のコードをコントローラー クラスに追加します。

Company c = new Company;

c.load ("thatCompany");

for (int i = 0 ; i < c.getEmployee_amount () ; i++)
{
   // get ith employee from list
   // test if was born before '80
   //do something, else do other thing
}

それは正しい働き方ですか?

于 2012-07-02T13:11:47.987 に答える
0

DAO でメソッドを作成して、次のような SQL クエリを実行するだけです。

SELECT * FROM people p WHERE p.born < '1980-01-01';

生まれた列にインデックスを作成することを忘れないでください。

さらに、1980年以前に生まれ、特定の企業で働いていた独身者をゲットするカフェ。

限界まで使えます。

SELECT p.* FROM people p p.company = c.id WHERE p.born < '1980-01-01' and p.company_id = 'thatcompany' LIMIT 1

(p.company_id が FK 列であるとします)

于 2012-07-02T00:16:54.480 に答える