首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于给定属性的内容检索与分类方案设计

基于给定属性的内容检索与分类方案设计
EN

Stack Overflow用户
提问于 2012-03-14 12:54:11
回答 1查看 141关注 0票数 2

这是我面临的设计问题。假设我有一个汽车网站。汽车具有以下属性,具有不同的可能值。

  • 颜色:红色,绿色,蓝色
  • 尺寸:小,大

根据这些属性,我想对年轻人的汽车、中年人的汽车和老年人的汽车进行分类,有以下标准:

  • Cars_young:红色还是绿色
  • Cars_middle_age:蓝色和大号
  • Cars_elder:蓝色和小型

我将这个条件称为目标

我有一辆列在桌子上的车: id,颜色和尺寸。

我需要能够:

(a)当用id检索汽车时,告诉它的目标(如果是年轻人、中年人还是老年人)

b)能够查询数据库,知道有多少视图属于每个目标

而且,作为一个开发人员,我必须以一种很容易改变这些标准的方式实现它。

实现它的最佳方式是哪一种?有设计模式吗?我可以解释我想过的两个可能的解决方案,但我不太喜欢:

1)在数据库表中创建一个名为目标值的新列,因此可以很容易地同时制作a)和b)。

缺点:每次危机发生变化时,我都必须更新所有cars的列目标,而且还必须更改insertNewCar()函数。

2)在“Cars”类中实现它。

缺点:每次标准发生变化时,我都必须更改b中的查询,以及a中“getCarById”中的代码。

3)在SQL中使用触发器,但如果可能的话,我希望避免使用此解决方案。

我希望能够在代码中的某个地方有这样的标准定义,可以很容易地更改,并且希望也能被“Cars”类使用。我正在考虑一些单点或全局对象的“目标”,可以在某些汽车方法中注入。

任何人都可以解释一个很好的解决方案,或者发送一些关于面临这个问题的帖子的文档,或者解决这个问题的模式设计?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-20 22:38:30

乍一看,specification模式可能满足您的期望。维基百科给出了一个很好的解释,它的工作原理,小戏谑:

代码语言:javascript
复制
OverDueSpecification OverDue = new OverDueSpecification();
NoticeSentSpecification NoticeSent = new NoticeSentSpecification();
InCollectionSpecification InCollection = new InCollectionSpecification();

ISpecification SendToCollection = OverDue.And(NoticeSent).And(InCollection.Not());

InvoiceCollection = Service.GetInvoices();

foreach (Invoice currentInvoice in InvoiceCollection) {
    if (SendToCollection.IsSatisfiedBy(currentInvoice))  {
        currentInvoice.SendToCollection();
    }
}

您可以考虑将specification模式与observers结合起来。

此外,也很少有其他的想法:

  • specification模式在SQL生成中的扩展(特别是子句)
  • 在数据库中存储标准配置
  • 标准版本控制:存储用于分配给类别本身的类别的规则版本的信息。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9702363

复制
相关文章

相似问题

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