Java 在面向对象编程中获取特定类的所有对象
最近我看到了一些获取所有对象的方法,我特别喜欢Factory方法,但是我看到人们在类之外使用函数,在用户对象上调用getAll方法等等 下面的示例是我最常用的从数据库获取所有用户的方法。虽然这是PHP代码,但我想看看人们如何在不同的编程语言中做到这一点 你喜欢什么?为什么?这更像是一场讨论,我希望下次我来做这件事时能给我更多的想法Java 在面向对象编程中获取特定类的所有对象,java,php,oop,design-patterns,factory-pattern,Java,Php,Oop,Design Patterns,Factory Pattern,最近我看到了一些获取所有对象的方法,我特别喜欢Factory方法,但是我看到人们在类之外使用函数,在用户对象上调用getAll方法等等 下面的示例是我最常用的从数据库获取所有用户的方法。虽然这是PHP代码,但我想看看人们如何在不同的编程语言中做到这一点 你喜欢什么?为什么?这更像是一场讨论,我希望下次我来做这件事时能给我更多的想法 class userFactory extends Factory { public function __construct(){ }
class userFactory extends Factory {
public function __construct(){
}
public function getAllUsers() {
$users = array();
$result = $this->db->Execute("SELECT * FROM user");
while (!$result->EOF) {
$users[] = new user($result);
}
return $users;
}
}
嗯,如果你只是在寻找想法,你可以考虑使用对象关系映射器(ORM)。这允许您将数据库查询的结果用作所选语言中的第一类对象。例如,如果我有一个公司和员工表,我可能可以在Ruby/Rails(使用ActiveRecord ORM)中实现这一点:
这将生成一个SQL查询,并自动创建一个一级对象系统。在前面的示例中,您可以通过使用以下类型的代码来完成此任务:$users = UserQuery::create()=>all();
如果您使用PHP,已经有一些好的orm存在,只需谷歌“PHPROM”就可以找到它们。有一些ActualErrd克隆,以及一些更适合PHP语言的。
嗯,如果你只是在寻找想法,你可以考虑使用对象关系映射器(ORM)。这允许您将数据库查询的结果用作所选语言中的第一类对象。例如,如果我有一个公司和员工表,我可能可以在Ruby/Rails(使用ActiveRecord ORM)中实现这一点:
这将生成一个SQL查询,并自动创建一个一级对象系统。在前面的示例中,您可以通过使用以下类型的代码来完成此任务:$users = UserQuery::create()=>all();
如果您使用PHP,已经有一些好的orm存在,只需谷歌“PHPROM”就可以找到它们。有一些ActiveRecord克隆,以及一些更适合php语言的克隆。您已经实现了的一部分(即使它返回用户实例,也不是工厂)。 DAO通常负责查找、创建、持久化、编辑和删除同类对象 另请参见-repository是更高级别的抽象-它可以查询多个DAO以获得预期的结果,但是一个DAO应该只查询一个db表 PHP持久性框架
- -类似Java的ORM,没有依赖项,请参阅(getter/setter应该是可选的)
- -ActiveRecord,Kohana 3.0 web框架的一部分
- -ActiveRecord,Zend框架的一部分
- 其他的很少(google orm/activerecord/persistence for php)
//ORM/ActiveRecord way
$user = Repo :: get ( "users" ) -> find_by_id ( $user_id );
$user = User :: find_by_id ( $user_id );
$user_payments = $user -> payments;
$user_articles = $user -> articles;
而不是:
$user_repository = Repo :: get ( "users" );
$articles_repository = Repo :: get ( "articles" );
$user = $user_repository -> find_by_id ( $user_id );
$user_articles = $articles_repository -> find_all_for ( $user );
ActiveRecord更简单,更易于使用,但它不是很OOP。方法如下:
- $user->save()
- $user->delete()
- 用户::查找所有()
- 用户::按\u id($id)查找\u
- 对于JAVA项目,google For JPA、Hibernate、Toplink、iBatis
- 对于Ruby,有一个ActiveRecord类
- 如果你真的喜欢OOP,用谷歌搜索smalltalk持久性:-)
- -类似Java的ORM,没有依赖项,请参阅(getter/setter应该是可选的)
- -ActiveRecord,Kohana 3.0 web框架的一部分
- -ActiveRecord,Zend框架的一部分
- 其他的很少(google orm/activerecord/persistence for php)
//ORM/ActiveRecord way
$user = Repo :: get ( "users" ) -> find_by_id ( $user_id );
$user = User :: find_by_id ( $user_id );
$user_payments = $user -> payments;
$user_articles = $user -> articles;
而不是:
$user_repository = Repo :: get ( "users" );
$articles_repository = Repo :: get ( "articles" );
$user = $user_repository -> find_by_id ( $user_id );
$user_articles = $articles_repository -> find_all_for ( $user );
ActiveRecord更简单,更易于使用,但它不是很OOP。方法如下:
- $user->save()
- $user->delete()
- 用户::查找所有()
- 用户::按\u id($id)查找\u
- 对于JAVA项目,google For JPA、Hibernate、Toplink、iBatis
- 对于Ruby,有一个ActiveRecord类
- 如果你真的喜欢OOP,用谷歌搜索smalltalk持久性:-)