与面向特定语言的问题相比,这更多是面向模式的问题。假设我有一个用户对象,它的形式是:坚持模型对象的模式?
class User
var id
var email
var password
var dateCreated
end
是我见过坚持用户对象
两种常见的方法如下:
// Approach 1
new User(id)
->setEmail(email)
->setPassword(pass)
->setDateCreated(date)
->saveNew()
在这种方法中,用户对象。已每个属性设置,然后saveNew
方法将建立正确的插入语句使用上分别设置了用户的属性数据库上执行(例如,insert into user values (this.email, ...)
另一种方法:
// Approach 2
new User()->saveNew(User userObj)
在这个例子中,你会发现save方法虽然是一个实例方法,但它被看作是一种静态方法,因为它正在传递一个已填充的User对象,而不是处理它自己的数据,而这又会建立起来正确的陈述(例如,insert into user values (user.email, ...)
)。
第二种方法对我来说感觉有点不对。但是,这就是我问你的原因。作为延续,让我问你一个类似的问题。比方说,我们想要获取一个用户。我们可以做类似如下:
new User(id)->fetch
- 或 -new User()->fetch(id)
现在,在获取方法,我已经看到了这2种方法:
function fetch
result = db->fetch('select * from user where id=this.id')
user = new User()
user->setId(result->id)
user->setEmail(result->email)
user->setPassword(result->password)
user->setDateCreated(result->dateCreated)
return user
end
- 和 -
function fetch
result = db->fetch('select * from user where id=this.id')
// We can set the properties directly or through their 'setters'
this->id = result->id
this->email = result->email
this->password = result->password
this->dateCreated = result->dateCreated
return this
end
返回一个新的用户对象而不是se对this
的属性看起来反直觉,但我看到它的地方。这一切是否重要?有没有一个合适的,纯粹的方式来做到这一点?
谢谢佩特。我更新了这个问题,增加了另一个案例。在'取'的例子中你有什么感觉? – naivedeveloper 2012-03-09 20:14:05
@naivedeveloper,看我的更新。 – 2012-03-09 20:30:44