我正在使用C#3.5我有一个IList<MyItemLinkProperty>,MyItemLinkProperty表示项目与其属性(一个或多个)之间的链接.它有ItemId,PropertyId,PropertyValue.在此列表中ItemId可以多次出现,因为项目可以具有许多属性,颜色,大小等(这是一个与性能相关的问题,我有这种列表并且没有映射到项目实体).
ItemID PropId PropValue
itemProperty1 = { 1001, 1, 'Red' }
itemProperty2 = { 1001, 2, 'Small' }
itemProperty3 = { 1002, 1, 'Red' }
itemProperty4 = { 1002, 3, 'Medium' }
itemProperty5 = { 1003, 4, 'Green' }
itemProperty6 = { 1003, 2, 'Small' }
Run Code Online (Sandbox Code Playgroud)
现在我需要找到所有具有属性A和属性B的项目.例如'red'和'small'.这应该给我ItemID1001具有这两个属性.
在伪代码中我想我是在"给我属性id为1或2且项目ID相同的项目".然后我知道有两个具有这些属性的项目.
我在想一个linq查询会这样做.但是没有得到这个工作并陷入困境.也许我在这里阻止了我的思绪,过度思考它并使其过于复杂......
为此提供最佳解决方案的任何提示?
一个具体的(我希望)问题,如果可能的话,我会喜欢具体的答案......关于聚合的DDD架构和存储库责任以及细粒度级别.
假设我有以下(简化)表格:
基本功能(仅用于显示方法的示例用法)
显示客户列表并单击以显示一个客户.编辑客户并从所有组的下拉列表中选择组.对于cateogry也一样.
题
我应该将客户组和类别视为单独的聚合:
CustomerRepository.使用方法GetAllCustomers,GetCustomerById等
CustomerGroupRepository.使用方法GetAllCustomerGroups,GetOneCustomerGroup
CustomerCategoryRepository.使用方法GetAllCustomerCategories,GetOneCustomerCategory
或者只有一个repo - CustomerRepository(具有上述所有方法,更明确地命名).
上面的层将是一个CustomerService,上面注入了一个/多个repos.
我想对如何考虑聚合和相关数据(类别,组)的大小以及细粒度存储库的优缺点进行思考.仍然保持简单,专注于以一种好的方式解决问题而不过度构建东西.
我试图在SO上找到类似的例子,并且还阅读了vaughn vernon的文章,但没有例如看到他的产品聚合的例子是如何处理产品类别的.
architecture domain-driven-design ddd-repositories aggregateroot