班级建模:多人,只有两个用户系统

本文关键字:两个 系统 用户 建模 多人 | 更新日期: 2023-09-27 17:56:35

在我的医院系统中有

  • 病人
  • 专业人员=医疗,秘书,医院工作人员
  • 供应商
  • =产品供应商
  • 公司=健康计划,其他

在这四个中,只有两个可以访问该系统:专业(工作)和患者(访问您的信息)

在我的财务模块中,每个人都要包含应付账款或应收账款,我需要在我的数据库中有一个类和信息,然后我创建了我的 Person.cs类

当我有应收账款时,我会通知PersonId,例如:

public class Payment
{
   public AccountType Type {get;set;} //CREDIT or DEBIT
   public int PersonId {get;set;} //HERE IS PROFESSIONAL OR PATIENTS OR SUPPLIER OR COMPANY
}

目前我已经完成了

public class Company: Person {}
public class Patient: Person {}
public class Supplier: Person {}
public class Professional: Person {}

但是患者和专业人员需要访问系统,因此他们是系统的用户

我使用 asp.net identity 并且不能有两个类继承IdentityUser我不能有 Person:IdentityUser,因为 UserName 属性和其他属性是必需的,供应商和公司无法访问系统。

我有 3 个解决方案:

解决方案1 所有组合(1-0/1)亲自.cs例如:

public class Person
{
  //Common properties (Id, Name, Address..)
  public User User {get;set;} //for access
  public Professional Professional {get;set;}
  public Company Company {get;se;t}
  public Supplier Supplier {get;set;}
  public Patient Patient {get;set;}
}

解决方案 2,所有班级中的人员组成,例如:

public class Patient
{
   //patient properties specifics
   public Person Person {get;set;}
}
public class Professional 
{
   //professional properties specifics
   public Person Person {get;set;}
}
public class User:IdentityUser
{
   //user properties specifics
   public Person Person {get;set;}
}
public class Company 
{
   //company properties specifics
   public Person Person {get;set;}
}
public class Supplier
{
   //Supplier properties specifics
   public Person Person {get;set;}
}

解决方案 3,仅限患者和专业人员中的用户属性

public class User: IdentityUser {}
public class Company: Person {}
public class Patient: Person 
{
    public int? UserId {get;set;} //nullalble
}
public class Supplier: Person {}
public class Professional: Person {
    public int? UserId {get;set;} //nullalble
}

每个人都是独一无二的,将有两个角色病人只会有耐心,永远不会是专业人士或公司。其他人也一样

有什么建议吗?

班级建模:多人,只有两个用户系统

代码试图对现实进行建模。您的代码是否反映了现实?

  • 公司是个人吗?哈哈
  • 产品供应商是一个人吗?可能,但可能不是。
  • 患者和专业人员是一个人可以担任的角色,但他们并没有定义一种新的人。人类是由组成的,而不是由病人和专业人士组成的。专业人士也可以是病人吗?我不明白为什么不。

根据您声明的业务规则,只有患者或专业角色中的人员才能成为用户。然后,一个人可能具有用户身份,并且根据其角色,可能能够使用该身份访问系统

enum Role
{
    Unknown = 0,
    Patient = 1,
    Professional = 2
}
class Person
{
    public IEnumerable<Role> Roles { get; private set; }
    public IdentityUser User { get; private set; }
}

那么谁来决定这个人是否可以登录呢?将您的业务规则封装在一个能够解决这个问题的类中。举个粗略的例子:

class Authenticator
{
    public bool IsAuthenticated(Person person)
    {
        if (person.User == null)
            return false;
        if (person.Roles.Any(x => x == Role.Patient || x == Role.Professional))
            return true;
        return false;
    }
}

等等。针对您尝试建模的现实进行设计。您可能还需要查看 ASP.Net 身份角色,因为此概念已经可供您使用,并且会将身份验证机制更接近您的身份(它们所属的位置)。