首页 新闻 会员 周边 捐助

根据业务需求选择模型还是保持模型关联?

0
悬赏园豆:10 [已解决问题] 解决于 2011-10-30 11:29

我的疑惑是这样的,主要是因为面向对象关系才纠结此问题!或许因为我了解面向对象
概念不到位,各位大哥指点指点哦...
举例:

class Role{
  int roleId;
  string roleName;
}
class User{
  int userId;
  string userName;
}

这里让我有点为难,如果根据业务需求我要显示用户角色信息,
那么用户角色模型可以有两种方式.
举例:
方式一

class  UserRole{
  int urId;
  User user;
  Role role;
}

方式二

class UserRole{
  int urId;
  int userId;
  string userName;
  int roleId;
  string roleName;
}

如果我用ORM映射UserRole模型
选择方式一那么每次我都必须映射创建User和Role模型,大量重复的创建,会不会影响效率?
选择方式二那么我只关心业务需要的东西,这样好像更简单明了,但会不会破坏我的模型关联封装?
显着多余?

请各位大侠发表下高见?


kaleyroy的主页 kaleyroy | 菜鸟二级 | 园豆:360
提问于:2011-10-28 01:06
< >
分享
最佳答案
0

毫无疑问方式二是有问题的,因为它不够DRY,一追问就能发现问题了:为什么UserRole类既有userId又有userName?难道id还不能唯一标识出一个user吗?如果User类又添加了一个属性Address,是否也要修改对应的UserRole呢?

方式一似乎是可以的,但好像又有点奇怪。我只能说如果是我的话,我会把Role作为User类的一个属性,像这样:

class Role { ... }
class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public List<Role> Roles { get; set; }
}

这样做是因为在任何的系统中,一个User都不可避免的会有一个或多个角色,因此把它作为User的属性是合理的。

收获园豆:10
水牛刀刀 | 大侠五级 |园豆:6350 | 2011-10-28 01:44

太好了!我一直也觉得我的写法怪怪的..
就是找不到其中的差异....
真是让我恍然大悟!!!我要的就是这个答案!!!

kaleyroy | 园豆:360 (菜鸟二级) | 2011-10-30 11:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册