关于这个问题我很关注.保存与对象或对象关系集合相关的ID集合更好.我也计划使用存储库方法.这就是我的意思:
public class Person
{
string PersonName {get; set;}
List<PersonFriend> PersonFriends {get; set;}
{
or...
public class Person
{
string PersonName {get; set;}
List<int> PersonFriendIds {get; set;}
{
Run Code Online (Sandbox Code Playgroud) 我有一个员工在一个集合中拥有多个地址.
public class Employee
{
public string Name { get; set; }
public AddressCollection Addresses { get; }
}
public class AddressCollection : IEnumerable<Address>
{
private readonly Employee employee;
private IList<Address> items = new List<Address>();
public void AddAddress(Address address)
{
if (items.Contains(address)) return;
address.Employee = employee;
items.Add(address);
}
public void RemoveAddress(Address address)
{
items.Removce(address);
}
/// further IEnumerable implementations
}
public class Address
{
public AddressType Type { get; set; }
public City City { get; set; }
public string …Run Code Online (Sandbox Code Playgroud) 我正在构建一个新的应用程序,并且是Domain Driven Design的新手.我一直在阅读文档,我已经设法模拟了大部分领域模型,但我想对两个查询提出一些建议:
我有两个域对象通道和程序.我已将这两者建模为实体,因为两者都可以独立访问.一个频道可以有一个节目列表,所以我把它作为频道的属性.我的查询是如何填充程序列表.是否可以使ChannelService中的getChannerById方法首先获取通道信息,然后调用ProgramService获取通道的程序列表,例如:
Channel {
String channelId
List <Program> programList
}
Program {
String programId {
}
ChannelService {
Channel getChannelById(String channelId)
}
ProgramService {
Program getProgramById(String programId)
List <Program> getProgramsByChannelById(String channelId)
}
Run Code Online (Sandbox Code Playgroud)我有一个产品域对象,但它的一些属性(例如规范和兼容性)涉及相当耗时的操作.这些属性并不是一直需要的,因此可以将这些属性作为域对象的一部分,并且在需要时具有填充这些属性的单独服务方法,例如
Product {
String productId
Specification specification
List <Product> compatibleProducts
}
ProductService {
Product getProduct(String productId);
void getProductSpecifications(Product product);
void getCompatibleProducts(Product product);
}
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共享的事实应该不足以赋予它个性(即身份)?!
谢谢
我正在使用addImage($ imageId),removeImage($ imageId),getImages($ from,$ count)等方法实现一个实体UserImages.
Phisycally,存储在应用程序级存储中的数据(图像ID集合),提供了很好的功能,如addItem($ keyName,$ item,$ weight),removeItem($ keyName,$ item),getItems($ key, $ from,$ count).
如何使模型使用DDD风格的外部(看起来形成域)存储,而无需引用UserImages实体的存储?重要的是,我不想将所有集合从存储加载到实体,正如传统方法所假设的那样.
希望我对问题提供了很好的解释,如果没有,请告诉我.非常感谢你的帮助.
在具有如下文件夹结构的PHP DDD应用程序中:
app/
views/
controllers/
domain/
models/ ( orm generated )
services/
factories/
以下类将代表什么(从DDD术语的角度来看)以及它们的推荐位置.
假设这个用例:
我希望从今年3月到7月之间购买波士顿的顾客.
有了DDD
我应该使用巫婆实施?
architecture design-patterns domain-driven-design specifications
问题
有四个实体:
class Product : Entity<Product> {
public virtual String Title { get; set; }
public virtual Category Category { get; set; }
public virtual Vendor Vendor { get; set; }
}
class Category : Entity<Category> { /* properties */ }
class Vendor : Entity<Vendor> { /* properties */ }
Run Code Online (Sandbox Code Playgroud)
这四个都没有定义为组件,我不知道应该使用哪一个(用IAggregateRoot接口标记)作为聚合根.
我需要轻松访问供应商列表,类别以在创建新产品时在页面上显示它们.
然后看来Repository根据这些实体应该有三个实例.
在旁边
我见过几个大型项目.他们大量使用Vendor,State,TechnicalOptions等独立实体的列表.我认为设计具有聚合根的东西是合乎逻辑的,但我不知道DDD原则是否适用于那里.
我已经搜索了大量关于有界上下文的内容,我知道它是域驱动设计中的一种模式,它是使用数据库上下文将我们的大型模型划分为更小的模型,但这让我有点混乱.事实上我不知道它到底是做什么的?使用这种模式有什么好处
请帮助我理解这种模式.
domain-driven-design entity-framework ef-code-first bounded-contexts