2009-03-06 13 views
1

Kullanıcılar hakkındaki bilgileri korumak için ActiveRecord kullanıyorum. Kullanıcı sınıfı beklenen load(), insert(), update() ve delete() yöntemlerine, setter'lara, getters'a ve diğer birkaç tanesine sahiptir. Ancak, diğer bazı yöntemlerin Kullanıcı sınıfında yer alması gerekip gerekmediğine karar vermekte veya ortak çalışanlar tarafından ele alındığında sorun yaşıyorum.Sınıf Sorumluluğu ve İşbirlikçiler Belirleme

İşte bir örnek:

kullanıcı onayı gerektiren isteyebilir birkaç işlemler vardır

. Bu geleneksel bir şekilde ele alınır - kullanıcıya bir bağlantı içeren bir e-posta gönderilir; Bağlantıyı tıklamak kullanıcının gerçekten işlemin devam etmesini istediğini doğrular. Doğrulama anahtarının bir hash ve son kullanma tarihi/saati kullanıcı kaydının bir parçası olarak devam eder.

Bu işlemdeki satırı nerede çizmeliyim? Doğrulamayı işleyen bir ortak çalışan olması gerekiyorsa (örneğin, düz metin doğrulama anahtarını sorgu dizesinden alarak ve bir Kullanıcı nesnesini param olarak kabul ederek)? Veya bu, Kullanıcı sınıfı tarafından dahili olarak ele alınmalıdır (düz metin doğrulama anahtarının bir yöntem çağrısında geçirilmesi)? doğrulama yapıldıktan sonra olur

çok sonraki şey, tabii ki, işlem aktif kayda bir güncelleme gerektiren devam edeceğini - ve orada, bana öyle geliyor, Kullanıcı sınıfı sorumluluğu olmalıdır.

Herhangi bir öneriniz var mı?

cevap

0

Bu görevi, confirmations tablosunu yöneten bir ortak çalışanına devretmeniz gerekir.

Tüm onaylama gereksinimlerini izlemek için Confirmation modelini kullanırsınız. Model User'a ait olacaktır, ayrıca onay karmasını ve onaylanacak eylemi (ör. activate_account, change_password veya change_email vb.) Yönetecektir.

Confirmation kontrol uygun modele uygun eylemi onay karma doğrulama ve zincirleme sorumlu olacaktır (->user.activate(), change_password - örneğin activate_account>user.setPassword() vs.) ve başarıyla tamamlanması üzerine confirmations tablodan Confirmation çıkarın.

Bu, mantığın daha iyi ayrılmasına olanak tanıyacağı gibi, daha iyi ölçeklendirmenize de olanak tanır, örn. Belirli bir kullanıcı için birden fazla bekleyen onayı beklemek (başka bir şeyi değiştirmek için ve şifresini değiştirmek için onay verin.)

+0

@Vlad - Gerçeklik kontrolü için teşekkürler. Bu şüphesiz doğru seçim! – PartialOrder