與面向特定語言的問題相比,這更多是面向模式的問題。假設我有一個用戶對象,它的形式是:堅持模型對象的模式?
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