首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD从值对象列表中删除文本值对象

问DDD从值对象列表中删除文本值对象
EN

Stack Overflow用户
提问于 2018-01-15 04:27:20
回答 2查看 355关注 0票数 0

我有一个包含如下值对象列表的实体:

(我正在使用Go,但我希望这通常是有意义的)

代码语言:javascript
复制
// this is my Crop entity
type Crop struct {
    UID uuid.UUID
    Name string
    Type string
    Notes []CropNote // This is a list of value object.
} 

// This is my CropNote value object
type CropNote struct {
    Content string
    CreatedDate time.Time
}

我有AddNewNote(content string)的作物行为。但业务流程也需要删除便条行为。我在想一些类似RemoveNote(content string)行为的东西。因此,我将迭代我的Crop.Notes,找到具有相同content的行,然后从Crop.Notes列表中删除该行。但我认为,通过笔记的内容来寻找价值是很容易出错的。从API的角度来看,这也很奇怪,因为我需要将内容发送到params。

我的问题是,我如何实现我的删除笔记行为以上?

编辑:对不起,我想我没有清楚地解释我自己。

我知道如何从切片中删除一个值。

我的问题是关于DDD。有关如何从Crop.Notes列表中移除仅具有上述字段的值对象。因为我们知道值对象不能有标识符。

如果我真的只能从值对象中使用Content和CreatedDate字段,那么当我执行REST请求时,应该将Content或CreatedDate值发送到端点,这是很奇怪的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-22 01:37:48

只需使用CropNote本身的实例:

代码语言:javascript
复制
/* sorry for sudo code, not up with GO */
func (c Crop) removeNote(noteToRemove CropNote) {
    c.Notes= c.Notes.RemoveItem(noteToRemove); /* RemoveItem() is your own array manipulation code */
}

现在由您的应用程序层来识别和调用删除便笺。

另外要考虑的是:

为什么作物笔记是作物总根的一部分?作物的行为是受音符的影响,还是作物的行为影响音符?不要试图在您的域中重建您的数据模型,这是没有意义的。如果您的系统需要独立添加/删除/更新作物注释,它们可能会更好地作为它们自己的聚合根,间接地依赖于现有的作物实体,例如:

代码语言:javascript
复制
/*again, not proficiant with GO - treat as sudo code */
private type CropNote struct {
    UID uuid.UUID
    CropUID uuid.UUID
    Content string
    CreatedDate time.Time
}

function NewCropNote(crop Crop, content string) *CropNote{
    cn := new(CropNote)
    cn.UUID = uuid.new()
    cn.CropUID = crop.UUID
    cn.CreatedDate = now()
    cn.Content = content
    return cn
}
票数 1
EN

Stack Overflow用户

发布于 2018-01-15 04:53:27

除了@WeiHuang的回答:如果您的笔记是一个无序列表,您可以使用交换而不是append或copy。

代码语言:javascript
复制
func (c Crop) removeNote(content string) {
    j:=len(c.Notes)
    for i:=0;i<j;i++ {
        if c.Notes[i]==content {
            j--
            c.Notes[j],c.Notes[i]=c.Notes[j],c.Notes[i]
        }
    }
    c.Notes=c.Notes[:j]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48256931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档