【问题标题】:Software Engineering: Organize different kind of users软件工程:组织不同类型的用户
【发布时间】:2021-01-05 13:41:29
【问题描述】:

好吧,

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

  • 我正在做一个电子商务平台,我们有很多种“实体”。实体不一定是拥有凭据并可以登录我们平台的用户,并且一切都应该与其他一切完全解耦。

  • 现实生活场景:我们有客户、员工和供应商,所有这些都可以是也可以不是用户,例如,他们可能有也可能没有登录凭据。我可以将联系人(地址信息)附加到任何这些模型或发票......我们的想法是我们可能有客户实际上没有我们向其开具发票的凭据,或者向用户创建订单实际上并没有登录...对于发票也是如此,我希望能够为客户和供应商开票。

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

你会如何设计这个?

【问题讨论】:

  • 在决定最终的设计模式之前,可以使用 OOP 建模技术来处理这些需求及其潜在实现(某些对象及其类可能需要一个或多个设计模式的组合才能正确实现),因此很难确定一种设计方法。

标签: oop model-view-controller design-patterns architecture e-commerce


【解决方案1】:

我会在逻辑上将用户与组织分开,然后为用户和组织创建抽象,然后为它们创建具体的类,这些类以适合每个人的任何组合组成。您实际上并没有三种类型的用户,您有两种类型,员工和外部组织的代表。那些外部组织可能有多个授权用户(或没有),他们也可能与您的员工有关系。您没有提及客户是代表个人还是组织,这会影响您对域进行建模的方式。下面是我将如何建模,假设客户在逻辑上是一个组织,而不是个人。如果 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;
}

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多