2009-07-11 3 views
0

Как бы вы определили друг друга - дружеские отношения в Grails? До сих пор мой класс Пользователь не имел много последователейКак смоделировать Друга - Дружеские отношения в Граале

class User { 
//Searchable plugin 
static searchable = true 

String userId 
String password 
boolean enabled = true 

// For Spring Security plugin's user registration. 
String email 
String userRealName 
boolean emailShow 

Date dateCreated 
Profile profile 

static hasMany = [ 
     posts : Post, 
     tags : Tag, 
     following : User, 
     authorities : Role, 
     notifications: Notification, 
     locations: Location, 
     incomingLocations:IncomingLocation, 

] 
static belongsTo = Role 


static constraints = { 
    userId(blank: false, size:3..20, unique: true) 
    password(blank: false) 
    dateCreated() 
    profile(nullable: true) 
    userRealName(nullable: true, blank: true) 
    email(nullable: true, blank: true) 
} 


static mapping = { 
    profile lazy:false 
} 

}

Но я хотел бы изменить следующий: пользователь что-то вроде дружбы: Дружба и создать класс дружбы следующим образом:

class Friendship { 

static belongsTo= [user:User] 
User friend2 
boolean areFriends 

}

Является ли это идеальной реализацией?

Как бы вы реализовали рукопожатие (принять/отклонить ожидающую дружбу)?

ответ

3

Возможно, вам не нужна модель Дружба напрямую. Вы можете просто иметь hasMany отношения, которые связывают пользователей как друзей. Вы не создаете эти отношения, пока кто-то не примет FriendRequest. Если они больше не хотят быть друзьями, просто удалите связь между двумя пользователями.

class User { 
    static hasMany = [friends:User] 
} 

class FriendRequest { 
    User fromUser 
    User toUser 
} 

Таким образом, Дружба не должна делать 2 вещи (связывать пользователей и статусы дорожек). И друзья становятся естественными объектными отношениями, которые могут сделать некоторые вещи, такие как оптимизация выборки немного легче.

Смежные вопросы