软件工程:组织不同类型的用户
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;
}
好的人,
在过去的几天里,我一直在思考如何正确地实现它,我想知道你的方法是什么来实现以下场景:
我做的是电商平台,我们有很多种“实体”。实体不一定是拥有凭据并可以登录我们平台的用户,一切都应该与其他一切完全分离。
现实生活场景:我们有客户、员工和供应商,所有这些都可以是也可以不是用户,因为他们可能有也可能没有登录凭据。我可以将联系人(地址信息)附加到这些模型中的任何一个或发票......我们的想法是,我们可能有客户实际上没有我们向其开具发票的凭证,或者没有向用户创建订单实际上并没有登录...开具发票也是如此,我希望能够为客户和供应商开具发票。
我遇到的问题是这 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;
}