标签: value-objects

如何建模价值对象关系?

上下文:
我有一个实体书.一本书可以有一个或多个描述.描述是价值对象.

问题:
描述可能比另一描述更具体.例如,如果描述包含书籍的内容以及封面的外观,则它比仅讨论封面外观的描述更具体.我不知道如何建模以及如何让存储库保存它.了解这些关系并不是本书和书籍描述的责任.其他一些对象可以处理此问题,然后请求存储库保存关系.但是BookRepository.addMoreSpecificDescription(Description,MoreSpecificDescription)似乎很难保存.

在DDD中如何处理这样的事情?

domain-driven-design repository value-objects object-relationships

1
推荐指数
1
解决办法
1163
查看次数

DDD值对象相等,== vs .Equals()

所以我有一个价值object,(任意说钱),我想为它实现平等.我知道==.Equals()(参考和数据相等)的预期/默认行为.

在这种情况下,我希望能够比较两个对象,并说它们相当于计算(例如1m和3ft是等效的)但是对于持久性(使用NHibernate,isDirty我认为取决于相等),用户显示和选择货币,我希望它们被认为是不同的.

在这种情况下,我应该

  1. 有不同的行为==.Equals()(以及应该做什么),
  2. 无论我想在哪里检查等效性,只需检查每个属性(意味着额外的代码)
  3. 实现一种方法.IsEquivalent()(我不想做后者)
  4. 我缺少的其他东西

我应该遵循最佳实践/模式吗?谢谢

编辑:我得到了一些关于改变汇率的回应.所以要更新清晰度.让我们说高度,而不是货币

  • 我想澄清一些假设:
  • // ignore:值对象包含十进制数量,字符串/类货币
  • // ignore:汇率不会改变.
  • // ignore:类货币知道它与另一个货币的汇率
  • value对象包含十进制数,字符串/类单元
  • 类单位知道它与另一个的转换
  • 我不打算扩大费率/转换率等

与实施货币相比,我更关注实践和模式.基本上,相同的方法是一个人的身高,其中身高是一个价值对象,({1,m}到{3,ft},其中1m总是"等于"/"相当于"3ft)

c# nhibernate domain-driven-design equality value-objects

1
推荐指数
1
解决办法
767
查看次数

货币是不是价值对象

我有 Person 聚合,这是根聚合

public class Person 
{
    private int id;
    private readonly PersonID personID;

    private readonly string email;
    private readonly string firstName;
    private readonly string lastName;

    private readonly string username;
    private readonly string password;
    private readonly Address BillingAddress;
}

public class Currency : IValueObject<Currency>
{
    private string name;
    private string currencyCode;
    private decimal rate;
    private string displayLocale;
    private string customFormatting;
    private int displayOrder;
    private bool primaryExchangeRateCurrency;
    private bool primaryStoreCurrency;

    //<summary>
    //Gets or a value indicating whether the currency is primary …
Run Code Online (Sandbox Code Playgroud)

c# oop domain-driven-design value-objects

0
推荐指数
1
解决办法
2027
查看次数

在以下模型中,地址不应该是值对象吗?

值对象如何存储在数据库中?:

假设公司和个人都有相同的邮件地址.哪些陈述确实有效?

   1."如果我修改Company.Address,我希望Person.Address自动获取这些更改"

   2."如果我修改Company.Address,它不得影响Person.Address"

如果1为真,则Address应为实体

如果2为真,则Address应为值对象.

不应该在上面的模型中邮件Address是一个Value Object,因为即使Company并且Person有相同的邮件,这个邮件仍然没有概念身份?

换句话说,如果最初CompanyPerson分享initial.address@gmail.com,然后获得新邮件new.address@gmail.com,那么我们可以争辩说邮件地址 initial.address@gmail.com本身没有改变,而是CompanyPersonnew.address@gmail.com替换它?

因此,根据我的理解,一个Address共享的事实应该不足以赋予它个性(即身份)?!

谢谢

entity domain-driven-design value-objects

0
推荐指数
1
解决办法
198
查看次数

如何在数据库中保存没有实体的对象

实体"schoolyear"具有可配置的可见工作日,在时间规划器中可见或不可见.

我现在看到2个posibilites来保存可见的工作日.

要么我建立N:M关系:N schoolyear有M VisibleWeekDays

或者我将可见的周日放在逗号分隔的字段中:"0,2,5"

这些数字是DayOfWeek枚举中的枚举值.

我是否应该真正去创建另外两个表(结点+ VisibleWeekDay表)的开销方式,只是为了在一个字段中保存一天的索引?

你会如何保存那些可见的工作日?

c# entities value-objects

0
推荐指数
1
解决办法
311
查看次数

将json数组作为json字符串存储在数据库中

我有一个名为Schoolyear的业务对象,该对象目前带有一个标志枚举:

[Flags]
public enum VisibleDayOfWeek : int
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这是没有标识符的值对象,它们不会获得额外的sql表。这也太过分了。

现在,我考虑将这些可见的天数(用户可以配置)保存为数据库中的int值。目前它可以工作,但是在数据库中进行读/写以及将这些值读/写到业务对象中并与该对象进行集成测试是很痛苦的。

当我有一个使用json数据的javascript客户端时,今天早上我想为什么不将我从浏览器直接获取的json数组另存为json字符串在数据库中。因此,我唯一要做的就是在客户端进行json.parse。为了在服务器端进行集成测试,我使用了json库中现有的json.serialize / deserialize方法。

一年中可见的天数仅更改1,2或3次,但不经常更改。每位使用者每5年有5个学年的资料行,可能还不多。可见天数列永远不会通过sql select查询。UI逻辑在客户端完成。

因此,对我来说,将json数组作为json字符串存储在sql数据库中是一个好主意。

您如何看待我的新方法?您是否看到我没有想过的任何负面副作用,以后我可以再次re悔?

sql-server json json.net value-objects datapersistance

0
推荐指数
1
解决办法
6355
查看次数