我希望尽可能地改进我的 OOP 代码设计,但我被困在这个问题上。
例如,我想在社交网站中获取用户所有朋友的个人资料。所以我有桌子Friendships
和Profiles
. 我有课Friends
和Profile
.
让我们Friends
成为处理用户友谊的类,并Friends::getFriendsProfiles()
成为获取和返回所有用户朋友的个人资料的函数。
所以在我的函数Friends::getFriendsProfiles()
中,我可以做一个
表连接(例如
SELECT * FROM Friends LEFT JOIN Profiles ON Friends.user2 = Profile.userId WHERE Friends.user1 = :userid
),或Profile
我可以只获取朋友的用户 ID,为每个朋友 ID创建一个对象,然后调用$profile->getProfile($friendid)
运行查询 (SELECT * FROM Profiles WHERE userId = $friendid
) 来获取朋友的个人资料。然后返回所有好友Profile
对象的集合。
选项 1 缺点:我的友谊班知道个人资料。当我需要更改配置文件的返回方式时(例如,我想为每个配置文件对象添加另一个属性),我需要在 2 个不同的地方进行更改。
选项 2 缺点:不是进行 1 次查询(我认为应该在 O(1) 中运行?),现在是 O(n),其中 n 是用户朋友的数量。
但是选项 2 更加简洁和松散耦合。我应该采取哪个选项?