这是我面临的设计问题。假设我有一个汽车网站。汽车具有以下属性,具有不同的可能值。
根据这些属性,我想对年轻人的汽车、中年人的汽车和老年人的汽车进行分类,有以下标准:
我将这个条件称为目标
我有一辆列在桌子上的车: id,颜色和尺寸。
我需要能够:
(a)当用id检索汽车时,告诉它的目标(如果是年轻人、中年人还是老年人)
b)能够查询数据库,知道有多少视图属于每个目标
而且,作为一个开发人员,我必须以一种很容易改变这些标准的方式实现它。
实现它的最佳方式是哪一种?有设计模式吗?我可以解释我想过的两个可能的解决方案,但我不太喜欢:
1)在数据库表中创建一个名为目标值的新列,因此可以很容易地同时制作a)和b)。
缺点:每次危机发生变化时,我都必须更新所有cars的列目标,而且还必须更改insertNewCar()函数。
2)在“Cars”类中实现它。
缺点:每次标准发生变化时,我都必须更改b中的查询,以及a中“getCarById”中的代码。
3)在SQL中使用触发器,但如果可能的话,我希望避免使用此解决方案。
我希望能够在代码中的某个地方有这样的标准定义,可以很容易地更改,并且希望也能被“Cars”类使用。我正在考虑一些单点或全局对象的“目标”,可以在某些汽车方法中注入。
任何人都可以解释一个很好的解决方案,或者发送一些关于面临这个问题的帖子的文档,或者解决这个问题的模式设计?
发布于 2012-03-20 22:38:30
乍一看,specification模式可能满足您的期望。维基百科给出了一个很好的解释,它的工作原理,小戏谑:
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生成中的扩展(特别是子句)https://stackoverflow.com/questions/9702363
复制相似问题