【问题标题】:How do you setup your domain model?你如何设置你的域模型?
【发布时间】:2011-01-17 15:09:03
【问题描述】:

我们即将创建一个新网站。该网站非常以用户为中心。我们向用户展示不同类型的信息。

现在我们即将决定如何对此进行建模,并且我们正在考虑一些选项。

首先我想描述一些常见的场景。 1) 有时我们想显示当前用户的用户名、城市和图片 2)有时我们想显示所有用户信息 3)有时我们只想显示用户名 4) 有时我们想显示用户名和城市

每个场景都与网站上的一个或多个页面相关。 例如,我们的论坛帖子页面可能会显示来自场景 1 的信息,我们的搜索可能会显示来自场景 4 的信息。

这可以通过多种方式解决,我想听听您认为最好的方法。

我采取了一些有利/不利的解决方案。

首先,多个类。 从用户创建一个具有所有通用属性的基类。然后从那里延伸。 例如。


public class BaseUser
{
    public string username;
}

public class User : BaseUser
{
    public string city;
}

public class UserWithPicture : User
{
    public string picture;
}

public class CompleteUser : UserWithPicture
{
    public string SomeProperty;
}

优点:只需要准确地填写您当时需要的内容,这使得从性能角度来看它是可扩展的。 缺点:当您将来需要更改某些内容时,很难维护。会有很多依赖。

另一种解决方案可能是始终将所有内容放在一个类中并一直使用它。

public class User
{
    public string username;
    public string city;
    public string picture;
    public string SomeProperty;
}

优点:您始终掌握有关用户的所有信息 缺点:你在哪里画线?我们可以把 OrderLines 和 UserContacts 放在这里吗?一切都依赖于这一类,如果您需要更改某些内容,则很难维护。

另一种解决方案是为几乎每个页面创建一个独特的上下文

public class ForumPost
{
    public string data;
    public string topic;
    public string username;
    public string usercity;
    public string userpicture;
}

公开课 SearchPost { 公共字符串搜索数据; 公共字符串用户名; 公共字符串用户城市; }

优点:不依赖其他任何东西,只需要填写必要的信息 缺点:开发速度较慢,如果您希望所有页面都有一个新属性(例如用户年龄),则需要进行大量更改。

建议?

【问题讨论】:

    标签: c# model dns oop


    【解决方案1】:

    你提到的所有场景都与领域模型关系不大:

    1) 有时我们希望显示用户名、城市和图片 当前用户 2) 有时我们想 显示所有用户信息 3) 有时我们只想显示 用户名 4) 有时我们想 显示用户名和城市

    您要显示的内容仅在表示层中受到关注。在设计数据模型时,忘记您想要显示的内容,并考虑代表您的业务实体的最佳方式。

    【讨论】:

    • “忘记你想展示的东西,想想代表你的商业实体的最佳方式。”那么,如果我们有一个用户论坛,您会如何建议该模型应该是什么样子?用户可以单独使用或在列表场景(线程/帖子)中使用。
    【解决方案2】:

    我会选择你的中间选项 - 一个具有所有属性的类。

    通过继承的第一种方法看起来像是维护/使用的噩梦。

    最后一种方法同样看起来很糟糕 - 大量重复。

    至于 OrderLines 和 UserContacts,我会将它们分成它们自己的类 - 一对多与用户类。

    ~克里斯

    【讨论】:

    • 如果用户填写了 100 个不同的属性,有很多不同的文本(大量数据)怎么办。即使我们只在 1% 的页面上使用它,是否应该通过网络发送?
    • 如果是这种情况并且是一个问题,您可以引入一个通用属性类,例如 class UserProperty { string username, string propertyKey, string propertyValue }。每个用户会有很多这样的属性,您可以为每个用例加载所需的属性。
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 2022-07-08
    • 2019-09-30
    • 2014-03-26
    • 2021-06-03
    • 1970-01-01
    • 2010-09-06
    • 2011-12-30
    相关资源
    最近更新 更多