これは、言語固有のものとは対照的に、パターン指向の質問の方がますますです。私は、フォームのあるユーザーオブジェクトがあるとします。このアプローチではモデルオブジェクトを永続化するためのパターン?
// Approach 1
new User(id)
->setEmail(email)
->setPassword(pass)
->setDateCreated(date)
->saveNew()
、Userオブジェクトを次のように私はUserオブジェクトを永続化するために見てきた
class User
var id
var email
var password
var dateCreated
end
2つの一般的なアプローチがあります。各プロパティが設定されており、その後saveNew
方法は、ユーザーに設定されたプロパティを使用して、データベース上で実行するために適切なinsert文を構築します(例えば、insert into user values (this.email, ...)
別のアプローチ:
// Approach 2
new User()->saveNew(User userObj)
この例では、saveメソッドは、インスタンスメソッドではあるが、インスタンス化されたUserオブジェクトを渡して自分のデータで作業していない静的メソッドのように扱われています適切なステートメント(例:insert into user values (user.email, ...)
)。
私にとって第2のアプローチは、少し間違っていると感じます。しかし、それが私があなたに求めている理由です。続きとして、私にあなたに同様の質問をさせてください。たとえば、ユーザーを取得したいとします。我々は、次のような何かを行うことができます:
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とは対照的に新しいUserオブジェクトを返すthis
のプロパティをttingは直感的ではないようだが、私はそれが場所を参照してください。これはすべて問題ですか?それを行うための適切な、純粋な方法がありますか?
ありがとうございました。別のケースを追加するために質問を更新しました。あなたは「フェッチ」の例でどのように感じますか? – naivedeveloper
@naivedeveloper、私の更新を参照してください。 –