上下文:
我有一个实体书.一本书可以有一个或多个描述.描述是价值对象.
问题:
描述可能比另一描述更具体.例如,如果描述包含书籍的内容以及封面的外观,则它比仅讨论封面外观的描述更具体.我不知道如何建模以及如何让存储库保存它.了解这些关系并不是本书和书籍描述的责任.其他一些对象可以处理此问题,然后请求存储库保存关系.但是BookRepository.addMoreSpecificDescription(Description,MoreSpecificDescription)似乎很难保存.
在DDD中如何处理这样的事情?
domain-driven-design repository value-objects object-relationships
所以我有一个价值object,(任意说钱),我想为它实现平等.我知道==和.Equals()(参考和数据相等)的预期/默认行为.
在这种情况下,我希望能够比较两个对象,并说它们相当于计算(例如1m和3ft是等效的)但是对于持久性(使用NHibernate,isDirty我认为取决于相等),用户显示和选择货币,我希望它们被认为是不同的.
在这种情况下,我应该
==和.Equals()(以及应该做什么),.IsEquivalent()(我不想做后者)我应该遵循最佳实践/模式吗?谢谢
编辑:我得到了一些关于改变汇率的回应.所以要更新清晰度.让我们说高度,而不是货币
与实施货币相比,我更关注实践和模式.基本上,相同的方法是一个人的身高,其中身高是一个价值对象,({1,m}到{3,ft},其中1m总是"等于"/"相当于"3ft)
我有 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) 假设公司和个人都有相同的邮件地址.哪些陈述确实有效?
1."如果我修改Company.Address,我希望Person.Address自动获取这些更改"
2."如果我修改Company.Address,它不得影响Person.Address"
如果1为真,则Address应为实体
如果2为真,则Address应为值对象.
不应该在上面的模型中邮件Address是一个Value Object,因为即使Company并且Person有相同的邮件,这个邮件仍然没有概念身份?
换句话说,如果最初Company和Person分享initial.address@gmail.com,然后获得新邮件new.address@gmail.com,那么我们可以争辩说邮件地址 initial.address@gmail.com本身没有改变,而是Company并Person用new.address@gmail.com替换它?
因此,根据我的理解,一个Address共享的事实应该不足以赋予它个性(即身份)?!
谢谢
实体"schoolyear"具有可配置的可见工作日,在时间规划器中可见或不可见.
我现在看到2个posibilites来保存可见的工作日.
要么我建立N:M关系:N schoolyear有M VisibleWeekDays
或者我将可见的周日放在逗号分隔的字段中:"0,2,5"
这些数字是DayOfWeek枚举中的枚举值.
我是否应该真正去创建另外两个表(结点+ VisibleWeekDay表)的开销方式,只是为了在一个字段中保存一天的索引?
你会如何保存那些可见的工作日?
我有一个名为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悔?
c# ×3
entities ×1
entity ×1
equality ×1
json ×1
json.net ×1
nhibernate ×1
oop ×1
repository ×1
sql-server ×1