软件工程:组织不同类型的用户

Software Engineering: Organize different kind of users

好的人,

在过去的几天里,我一直在思考如何正确地实现它,我想知道你的方法是什么来实现以下场景:

我遇到的问题是这 3 种类型的用户或多或少是相同的,他们可以附加 orders/invoices/contacts/whatever,但他们不一定是用户。事实上,凭​​据必须是我们应该能够附加到任何这些模型的东西,如果我们愿意的话,这样供应商就可以登录以访问他们需要的任何东西。

你会如何设计这个?

我会在逻辑上将用户与组织分开,然后为用户和组织创建抽象,然后为它们创建具体的 类,它们由适合各自的任何组合组成。你实际上并没有三种类型的用户,你有两种类型,员工和外部组织的代表。这些外部组织可能有多个授权用户(或没有),他们也可能与您的员工有关系。您没有提及客户是代表一个人还是一个组织,这会影响您对域建模的方式。下面是我将如何建模,假设客户在逻辑上是一个组织,而不是个人。如果 Customer 是一个人,authorizedUsers 将向下移动到 Supplier,而 Customer 将有一个 User 属性.

abstract class TransactionalEntity
{
    String name;
    Set<Address> billingAddresses;
    Set<Address> shippingAddresses;
    Set<Invoice> invoices;
    Set<Order> Orders;
    Set<User> authorizedUsers;
}

abstract class User
{
    String firstName;
    String lastName;
    String email;
    String username;
    String password;
}

class Supplier extends TransactionalEntity
{
    Set<Product> suppliedProducts;
}

class Customer extends TransactionalEntity
{
    Employee salesRepresentative;
}

class Employee extends User
{
    String title;
    Double salary;
    Date startDate;
    Address homeAddress;
    Employee supervisor;
}