构建用户类型

时间:2009-11-22 10:29:18

标签: c# architecture

我正在开发一个拥有不同类型用户的系统。基于他们的角色,系统收集不同的信息。我有点不确定如何最好地构建它。

在基础级别,我有一个User实体,它只包含用户的核心信息。除此之外,我需要在某处存储公共信息(不确定是将其添加到用户实体,创建类似于Profile实体,还是创建扩展User实体的Member实体)。

在此之后,我需要在某处存储用户类型特定数据。我的角色是“卖方”,“商家”和“买方”。用户/成员可以是这些用户类型中的一个或多个。我不确定这些是否应该是扩展基本User / Member的单独实体,或者它们是否更像是扩展配置文件,它们是User实体的属性。

有人能够采用最好的方法来构建这个吗?

4 个答案:

答案 0 :(得分:2)

除非基本上与用户无关的公共信息,否则您可以将其存储到用户实体中。对于rôles,请考虑将单独的实体链接到用户实体。这允许向用户添加新的rôles(当一直在购买东西的人突然决定卖东西时发生),基于接口的解决方案可能会遇到问题(当然,取决于您的实现语言)。

常见的缺陷是将所有rôle字段添加到用户实体。它可以工作,但随着新的系统被添加到系统中,它往往会变得不可维护。

答案 1 :(得分:1)

我刚刚为我正在研究的系统创建了非常相似的东西。一般而言,理论是将实体的定义(他们是谁)与其行为(角色;他们所做的)分开。我还希望保留基于分配给它们的角色中包含的元数据来查询用户的能力。

我最终创建了一个Person类,如下所示:

class Person {
  Guid Id;
  ISet<Role> Roles;
  string Name; // and any other stuff a "person" might have

}

接下来,我有一个抽象的Role类,如下所示:

abstract class Role {
  Guid Id;
  abstract string Name { get; } // implemented by concrete definitions of roles
  Person Person;
}

由此,我推导出了“定义”我系统中每个角色的单个类。 User角色看起来像这样:

class User : Role {
  override string Name { get { return "User"; } }
  string LoginId;
  string Password;
  // etc.
}

冲洗并重复您可能拥有的任何其他角色。

在ORM级别(我使用NHibernate),我将UserRole定义为Role实体的连接子类。

这种方法背后的基本假设是:

  • 角色不是动态的。

数据层没有角色定义。存在一个角色只是因为有一个派生自它的类。

  • 您无法为同一角色分配角色 人多次不同 元数据

嗯,从理论上讲,我猜你可以,但是我的特定系统对于一个人有两个User角色分配给他们使用不同的登录ID和密码没有任何意义。

答案 2 :(得分:0)

首先,我要为每个界面创建一个单独的界面:IUserIMemberISellerIMerchantIBuyer。然后我将为每个接口创建一个单独的类,它理解如何处理实例的 CRUD (创建,读取,更新和删除)。

nexus是成员IMember界面需要IsSellerIsMerchantIsBuyer的方法/功能。如果那些返回TRUE,您知道可以将Member对象强制转换为相应的接口,或者至少通过方法获取接口处理程序。请注意,Member对象也始终支持IUser接口。

这应该是你的开始。

答案 3 :(得分:0)

取决于可用角色是固定的还是流畅的。听起来他们已经修好了,所以你可以:

  • 将user.role定义为int。
  • 将角色定义为2的幂的静态int,例如Role.SELLER = 1,Role.MERCHANT = 2,Role.BUYER = 4,等等。
  • 将hasRole()方法添加到执行简单按位OR运算的用户对象,以确定用户是否具有特定角色。