我正在学习编程模式,在完成最后的任务时,我们被要求建立一个“在线商店”。
我正在考虑如何为User
或Admin
建模Customer
。
我考虑过使用策略模式对每个User
进行特定行为的建模。
到目前为止,他们尚未共享任何行为,因此Admin
无法addToCart
,而Customer
无法registerNewProduct
。
但是,他们可以在系统演进时共享行为/方法!
此外,User
不会在运行时更改其类型。即,一旦您以客户身份登录,就无法以管理员身份重新登录。
即使他们共享seeProductList
之类的行为,也可以通过良好的继承来实现,对吗?
我应该使用策略,继承还是您推荐其他模式?
如果您需要更多信息,请告诉我! :)
谢谢。
答案 0 :(得分:2)
我认为您跌入了{strong>模式的db.products.aggregate([{
"$match": {
"tenant_id": XXX,
"type" : 2
}
}, {
"$project": {
"name": 1,
"sku": 1,
"members": {
"$filter": {
"input": "$members",
"as": "member",
"cond": {
"$and":
[
{
"$gte": ["$$member.product_warehouses.available_qty", 10]
},
{
"$lte": ["$$member.available_qty", 50]
},
{
"product_warehouses": {
"$elemMatch" : {
}
}
}
]
}
}
}
}
}])
。
实际上,这里没有明显的理由使用puzzle
。首先让我们看看Strategy
最突出的功能是什么。
策略是一种行为设计模式,可让您定义一系列算法,封装每个算法,并使它们可互换。策略使算法可以独立于使用该算法的客户端而变化。
如我所见,如果您想使用不同的Strategy
来解决同一问题,则可以使用methods/algorithms
。
一个演示将是Strategy
,并且有几种方法可以针对不同的情况来分析文件。
parse(File file)
parseInParallel(File file) // when in single-user system;
您会看到,他们实现了相同的目标,但是使用了不同的方法。
在您的情况下,我想推荐parseSequatially(File file) // multi-user system;
,因为 Customer 和 Admin 之间有很多共同的功能,其中可能包括:
但是正如您已经提到的,许多方法是不同的。因此,您可以将它们分别添加到inheritance
中,因此基本上您将拥有subclass
,Person
和Customer
。
Admin
具有最基本的信息和方法,Person
具有与客户和Customer
类似的方法和新字段。