我正在做一个简单用例的面向对象设计的基本练习:书籍可以用很多标签进行标记。书籍和标签的OO设计
我有很多的解决方案,我希望你的意见能够在OOD原则和可靠性方面更好。
选项1
public class Book {
private String title;
//... other attributes
private List<Tag> tags;
}
困扰我的是,我们混合一书的核心属性与附加的分类或搜索数据的事情。我将来可能会有某些书无法加标签的要求。在未来,当我添加更多responsabilities书类可以变得臃肿:类别,即读取它的用户,评级列表...
选项2
public class TaggedBook extends Book {
private Book book;
private List<Tag> tags;
}
我认为这是类似于装饰者模式,但我不认为它适合在这里,因为我不扩展行为。
选项3
解耦书籍和标签comnpletely,并使用一个服务从一本书中检索标签(给每本书都有一个唯一的标识符)
List<Tag> TagService.getTags(Book book)
不过,我不知道找到这个解决方案非常优雅(是吗?),我可能不得不发送两个查询:一个检索该书,另一个检索标签。
我计划申请其他要求的最佳选项:一本书有一个等级,一本书可以被分类...
我还计划使用DMS存储书籍和标签的对象。由于它不是一个关系数据库,它的模式可能会对应于类设计。
谢谢
“标签”不是自己的实体吗?如在,不仅仅是一个字符串 - 它可能有一个描述等... – cHao 2012-03-21 06:21:37
是的,谢谢,这是我的原创设计,但我忘了将它包括在问题 – 2012-03-21 06:24:59