0

我正在尝试为我们的企业应用程序创建一组模型。它从来没有让它们与数据库非常紧密地联系在一起。在这一点上,我试图简单地回答“Is-A”或“Has-A”问题。我是基于数据库结构的,但我不想被束缚。

首先,我有一个非常明显的 Person 模型,带有典型的“Has-A”电话和地址。几乎所有东西都使用那个 Person 模型并且是“Has-A”。

但是,我们有会员。在我们的数据库/当前系统中,成员是具有注册的人。具体来说,是取消注册(按日期) 的某种类型的注册。

一方面,我觉得 Member 会继承形式 Person 作为“Is-A”关系。但是我对这种类型的事情很陌生,我想知道我是否想多了。我的人是“有一个”注册还是暗示其他什么?

这让我想知道,如果我有会员,我是否应该有不同的“Is-A”模型用于预注册、注册、前注册?似乎这更像是一个国家问题,但同样,我对此并不陌生。如果这是一个状态问题,我是否回到只是拥有一个“有-A”注册的 Person 模型?

我理解这在某种程度上是基于意见的,我欢迎每个人对此发表意见。

4

2 回答 2

1

Person 在层次结构中更高更有意义。在所有人的群体中,你有一些成员、一些前成员和一些未来成员。

如果你试着换个角度看,说从所有成员的组中,所有人都是人……但有些人被取消注册?这样就没有多大意义了,因为如果他们被取消注册,那么他们就不再是会员。

除非成为会员和注册没有关联(即,如果您可以取消注册但仍然是会员)。

于 2012-04-11T16:37:41.953 回答
0

好吧,我会试着回答你的问题,虽然我不完全理解什么是“注册”(我不是以英语为母语的人)我猜它是某种会员资格。

假设您将决定使用 IS-A 关系,因此您最终会得到:Member:Person、VIPMember:Member、ExMember:Member 等。如果您将 Person 对象更改为 Member 或其他任何东西,您会怎么做?您必须将您的对象转换为这种类型,从 Person 对象创建一个 Member 对象复制值......这是很多样板工作。

如果 Object 在创建后更改它的类型,最好使用一些属性来区分它的类型。Cosider Apple : Fruit (Apple 总是 Fruit, 它不能变成 Tomato) 和 CanceledOrder : Order (Order 可以变成 CanceledOrder 所以我更喜欢 Order.State)。对于语言来说尤其如此,因为一旦创建了对象就无法更改它的类型(如 C#)。

至于您的情况,据我了解,我将创建:

public class Person
{
    public IEnumerable<Membership> Memberships {get;}

    public bool IsMember 
    {
        get
        {
            return Memberships.Any();
            //Or what ever logic you imply
        }
    }
}
于 2012-04-11T19:24:46.703 回答