Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 设计基于给定属性检索和分类内容的解决方案_Oop_Design Patterns - Fatal编程技术网

Oop 设计基于给定属性检索和分类内容的解决方案

Oop 设计基于给定属性检索和分类内容的解决方案,oop,design-patterns,Oop,Design Patterns,这是我面临的一个设计问题。假设我有一个汽车网站。汽车具有以下具有不同可能值的属性 颜色:红、绿、蓝 尺寸:小,大 基于这些属性,我想根据以下标准将年轻人的汽车、中年人的汽车和老年人的汽车进行分类: 年轻的汽车:红色还是绿色 中年车:蓝色大 汽车:蓝色和小型 我将此标准称为目标 我有一张表,上面有列:id、颜色和大小 我需要能够: a)按id取回汽车时,告诉目标(如果是年轻人、中年人或老年人) b)能够查询数据库,以了解每个目标的汽车视图数量 此外,作为一名开发人员,我必须以一种易于更改这

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

  • 颜色:红、绿、蓝
  • 尺寸:小,大
基于这些属性,我想根据以下标准将年轻人的汽车、中年人的汽车和老年人的汽车进行分类:

  • 年轻的汽车:红色还是绿色
  • 中年车:蓝色大
  • 汽车:蓝色和小型
我将此标准称为目标

我有一张表,上面有列:id、颜色和大小

我需要能够:

a)按id取回汽车时,告诉目标(如果是年轻人、中年人或老年人)

b)能够查询数据库,以了解每个目标的汽车视图数量

此外,作为一名开发人员,我必须以一种易于更改这些标准的方式来实现它

实施它的最佳方式是什么?它有设计模式吗?我可以解释两种可能的解决方案,但我不太喜欢:

1)在数据库表中创建一个名为target的新列,这样就很容易创建a)和b)

缺点:每次更改Criteria时,我都必须更新所有车辆的列目标,并且还必须更改insertNewCar()函数

2)在“汽车”类中实施

缺点:每次条件更改时,我都必须更改b)中的查询以及a)中“getCarById”中的代码

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

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


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

乍一看
规范
模式可能满足您的期望。给出了一个很好的解释它是如何工作的,下面是一个小提示:

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();
    }
}

可以考虑组合<代码>规范>代码>模式>代码>观察者< /代码>。 还有一些其他想法:

  • 扩展SQL生成的
    规范
    模式,特别是WHERE子句
  • 在数据库中存储条件配置
  • 条件版本控制:存储有关用于分配给与类别本身相关的类别的规则版本的信息

标准有多复杂?你在b中的意思是什么?每个目标既是一个策略,又是一个汽车订阅的观察者如何?标准可能会改变,不会添加新的属性(例如:汽车年轻:红色,汽车中年:(蓝色或绿色)和大,汽车老年:(蓝色或绿色)和小)。Be’views,我的意思是每次查看给定汽车的页面时,我都会跟踪为‘查看页面’。关于你的第二个评论,我会考虑的,谢谢