0

这周五我要参加“软件工程”考试,但是有一点我听不懂,老师也无法解释。

我必须基于边界控制器实体 (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 ();
   }

到目前为止,一切都清楚了。

当我实现“加载”方法时,我想使用搜索参数(数据库中的主键)用数据库中的数据“填充”我的实体实例。但是,例如,如果我想让所有出生于 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);
  }
}

这完全是疯了,不是吗?

所以,我需要一个返回集合的“加载器”方法,这样我就可以在 DAO 中实现一个返回所有出生于 1980 年之前的人的方法,只需一个简单的 SQL 查询。只有当控制类直接与 DAO 对话,忽略 BCE 模式规则时,才能做到这一点。

如果这是一个真正的问题,我该如何解决这个问题?

4

2 回答 2

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 回答
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 回答