Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop “成员”;Is-A";“人或人”;Has-A“;注册_Oop_Domain Driven Design - Fatal编程技术网

Oop “成员”;Is-A";“人或人”;Has-A“;注册

Oop “成员”;Is-A";“人或人”;Has-A“;注册,oop,domain-driven-design,Oop,Domain Driven Design,我正在尝试为我们的企业应用程序创建一组模型。它从未将它们与数据库紧密地联系在一起。在这一点上,我试图简单地回答“Is-A”或“Has-A”的问题。我是基于DB结构的,但我不想,必然地,被束缚在这上面 首先,我有一个非常明显的人物模型,带有典型的“Has-A”电话和地址。几乎所有的东西都是从那个人的模型出发的,是一个“Has-a” 不过,我们有议员。在我们的DB/当前系统中,成员是具有注册的人。具体而言,是指某一类型的已取消注册的注册(按日期) 一方面,我觉得该成员将继承人作为“是-是”关系。然而

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

首先,我有一个非常明显的人物模型,带有典型的“Has-A”电话和地址。几乎所有的东西都是从那个人的模型出发的,是一个“Has-a”

不过,我们有议员。在我们的DB/当前系统中,成员是具有注册的人。具体而言,是指某一类型的已取消注册的注册(按日期)

一方面,我觉得该成员将继承人作为“是-是”关系。然而,我对这类事情还很陌生,我想知道我是否想得太多了。我的人是“有A”注册还是这意味着什么

这让我想知道,如果我有一个会员,我应该有不同的“Is-a”模式用于预注册、注册、以前的注册吗?这似乎更多的是一个国家的问题,但再一次,我在这方面是新手。如果这是一个国家的问题,我是否又回到了“有a”注册的个人模式


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

更合理的做法是,让每个人在继承权中处于更高的地位。在所有人中,你有一些成员,一些前成员,还有一些未来成员

如果你试着从另一个角度来看,从所有成员的群体中说,所有人都是人……但有些人被开除了?这样做没什么意义,因为如果他们被开除,那么他们就不再是会员了


除非成为会员和注册没有联系(即,如果你可以被取消注册并且仍然是会员)。

好吧,我会尝试回答你的问题,尽管我不完全理解什么是“注册”(我不是英语母语),我猜这是某种会员身份

假设您决定使用IS-A关系,那么您最终会得到: 成员:Person、VIPMember:Member、ExMember:Member等。如果您的Person对象更改为Member或其他任何内容,您会怎么做?您必须将对象转换为此类型,创建成员对象从Person对象复制值。。。那是大量的样板工作

若对象在创建后更改了它的类型,最好使用一些属性来区分它的类型。Cosider苹果:水果(苹果永远是水果,它不能变成西红柿)和CanceledOrder: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
        }
    }
}
公共类人物
{
公共IEnumerable成员身份{get;}
公共图书馆会员
{
得到
{
返回成员资格。任意();
//或者你暗示了什么逻辑
}
}
}

对于您的最后一句话,否,尽管您可以在系统中拥有仅适用于会员的内容,即使您是Dis-Registered会员。这就是为什么我觉得这几乎像是一种“状态”,但我知道什么,因为我必须首先问。对于你的第一句话,也许我是误解,但我也认为这个人应该更高。我想问的是,我的人是应该注册,还是应该有一个从注册人那里继承的成员。此外,我想知道我如何管理整个“状态”的事情。这更有道理吗?你当然知道!这毕竟是你的节目。几个问题:1)你能有多个注册吗?2) 你能有多个会员资格吗?我不确定您将如何管理状态,您可能应该首先确定您想对成员/注册做什么。是的,您可以有多个注册。注册使您成为会员。无论您是预注册会员、会员还是前会员。在我看来,注册在这里很重要。因为如果您已注册,那么您就是一名成员,那么您可以捕获注册中的所有成员:人员a已注册(表示成员身份。人员A的注册是x、y和z。人员B已注册,人员B以前的注册是x、y和z。人员C已预注册,人员C的预注册是x、y和z。从这一点可以看出,成员身份只是注册状态的描述。注册听起来像是(特别是因为你提到了几次注册——预注册、前注册等)。在这种情况下,缺少的是注册的“在什么地方”(例如,某种计划?)。@Fuhrmanator:听起来你认为我的Person类使用上述“关联类”进行了“a”注册与我有一个从我的Person类继承的成员类相比……我想我同意。我将把这个概念应用到我的模型中,看看它是什么样子。就像你的链接示例注册有一个日期范围,使得这看起来像是一个不需要思考的问题。Is-a对我来说没有意义,原因与@Alex Burtsev在下面的回答中提到的相同。