我们即将创建一个新网站。该网站非常以用户为中心。我们会向用户显示不同类型的信息。
现在我们即将决定如何对此进行建模,我们正在考虑一些选项。
首先,我想描述一些常见的场景。 1)有时我们想要显示当前用户的用户名,城市和图片 2)有时我们想要显示所有用户信息 3)有时我们只想显示用户名 4)有时我们想要显示用户名和城市
每个方案都与网站上的一个或多个页面相关。 例如,我们带有forumposts的页面可能会显示方案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; }
public class SearchPost { public string searchdata; public string username; public string usercity; }
优点:不依赖于其他任何东西,只需要填写必要的信息 缺点:开发速度较慢,如果您想为所有页面创建一个新属性(比如用户年龄),则需要进行大量更改。
建议?
答案 0 :(得分:2)
您提到的所有方案都与域模型关系不大:
1)有时我们想要显示用户名,城市和图片 当前用户2)有时我们想要 显示所有用户信息3)有时我们只想显示 用户名4)有时候我们想要 显示用户名和城市
您想要显示的内容仅在表示层中受到关注。在设计数据模型时,忘记您想要显示的内容,并考虑代表您的业务实体的最佳方式。
答案 1 :(得分:0)
我会选择你的中间选项 - 一个具有所有属性的类。
通过继承的第一种方法看起来像是维护/使用的噩梦。
最后一种方法同样看起来很糟糕 - 很多重复。
对于OrderLines和UserContacts,我会将这些分成他们自己的类 - 来自User one的一对多。
〜克里斯