一个项目的一块设计问题

目前正在做一个关于照片的项目,其中有一块设计请大家帮着看看
有需要种类的商品,比如画册,海报等,而在这些种类里面呢,还包括了比如经典画册,正方形画册,海报中也是经典海报,迷你海报等等,而且他们还有不同的规格,比如7*5 10页画册,6*4 20页画册。海报呢又分为横向和纵向,7*5,6*4等等不同规格。而且这些规格和种类决定了画册和海报的价钱,对于这样的情况,如何提取模型比较合适呢?
总的结构是这样-----------商品种类分画册和海报等
每一种商品又分不同的比如经典的,迷你的等,各个种类商品分的还不一样
每个种类的商品有几中不同的规格!
商品的价钱是根据种类和规格定义的价格!
这里的实体和值对象如何区分开!
[该贴被yongbuyanbai于2008-08-25 17:11修改过]

不知道价格的定义到底是依靠什么,是上层的种类还是最下层的规格,如果是最下层的规格,那我觉得没有什么种类、规格、横纵向的区别,都是Component

我再描述一下吧,有可能没描述明白!
这个项目是个网上设计的项目,设计例如相册,画报,贺卡等,利用客户上传的照片,他们自己DIV一个自己喜欢的作品,然后定购。
有个模块是关于网站提供的商品的,商品分这么几种:画册,画报,贺卡,T恤,台历等,然后在每种商品中又按照不同的方式分为各种不同的类别:比如:
画册:经典画册,迷你画册,可爱画册等等
画报:经典画报,超玄画报,震撼画报等等
而且每一种商品又按照规格的不同分为了不同规格的:比如:
画册分7*10 40页画册 ,5*820页画册
画报也是只是规格属性不同:他按照横向还是纵向来走,没有页数的区分!
这个里面怎么划分实体和他们之间的关系,实体和值对象不知道如何划分,请赐教!急等谢谢了!
感觉虽然看着挺明白,但是好象这种没有什么共同的地方,抽象也不知道如何抽象,组织结构也不知道如何组织,愁死我了!
[该贴被yongbuyanbai于2008-08-26 09:23修改过]

只是分类的话是不用理会分类名称的,一律都叫作Kind或Category就可以,它们有父级Kind和子Kinds。就像文件系统里有多个文件夹,都叫不同的名字,不过都有相同的操作。
关键是您描述了需要按某些Kind定价,这个描述不够精确,如果就是按最后的叶子也就是商品定价,对于它上面的目录级就用Component。
现在我先假定是每个商品各自定价,描述类似以下:


class Category{
private Category parent;
private Collection<Category> children;
private String name;
}
class Product{
private String name;
private Category category;
private BigDecimal price;
}

画册和海报是值对象,是一种特征描述,综合其他尺寸和种类组合成一个实体。

还不是怎么明白,我把这个项目的关键地方描述下吧,请banq和各位道友给个详细的解释!
该项目是希望用户上传自己的照片,利用这些照片然后可以在网站编辑自己喜欢的画册,海报,台历(统称作品)等,然后提交定单,就可以买到自己制作的作品了.
系统提供了几种作品的类型:画册,海报,台历,T恤等,这些作品都有不同的规格.
但是画册的规格是依据页数,长宽,照片数分的.比如20页 8*9的规格,25页 5*7的规格.
海报是没有页数的概念,只有长宽,照片数.
规格依据不同作品有不同的规格分类方式.
这是按照规格分类的.
按照类型分类.
画册分经典,可爱,时尚等类型,用户选择一种类型的画册后进入编辑界面进行对画册的编辑.并在编辑之后选择一个规格(几*几的)
海报,台历等都一样,也是分好多类型,用户选择喜欢的后进行编辑
作为画册,海报,台历这些作品有可能将来扩展其他的作品.
这里是从最外层考虑的需求,这里有几个内容:作品,作品类型,照片,规格等,这里怎么对他们进行抽象和提取,哪些是值对象,哪些是实体,依据是什么? banq说画册和海报是值对象,依据呢,我没怎么看明白,请详细解释下!

Category a=new Category("画册");
Category b=new Category("海报");
Category a1=new Category("经典");
Category a2=new Category("迷你");
Category a3=new Category("可爱");
a1.setParent(a);
a2.setParent(a);
a3.setParent(a);
Category a11=new Category("20页8*9");
Category a12=new Category("25页5*7");
a11.setParent(a1);
a12.setParent(a1);
Product p=new Product();
p.setCategory(a11);//这时候p作品就有a11和a11所有直、间接父类型的类型了(a11->a1->a)
我也不明白作品、作品类型、照片、规格这些到底有什么实质性的区别,按我的理解就是个目录而已。

恩,谢谢了,你这个想法我以前也想过,不过总感觉缺点什么,分不清楚值对象和实体对象,所以很迷惑啊!

恩,谢谢了,你这个想法我以前也想过,不过总感觉缺点什么,分不清楚值对象和实体对象,所以很迷惑啊!

第一因为您在第一帖描述了定价的概念,并指出定价是依据某些Category的,但在后面没有再描述,我不知道这东西到底是怎么样一个概念,究竟是否在依赖着某些Category。
第二因为我不是很清楚针对某些特别的Category到底还有什么不同,这点没有描述。但是您一直认为对于画册和海报是不同的两个东西,所以我如果假设它们真是不同的东西而不是同一个模子创建的两个不同名的对象,比如对画册可以执行翻阅操作,对海报不能但却能执行张贴操作,那就真正是两个类型了,上面那个模型就不适用了,但可以扩展它,因为它们仍然保持着目录式的结构。
但是并没有清楚的描述这些,所以暂时我认为它们都是拥有相同操作但名称不同的东西。
那么对于一个P产品它是拥有一些类型的,它和这些类型组合在一起才算做一个完整的实体,因为没有任何一个P产品可以丢失类型而存在,操作产品的时候只需要操作P。但是因为有需求是可以增加类型的,比如加了一个拉锁类型,如果为了区别它和其它类型是不一样的,Category在这个操作里也是实体,这种情况下尽管没有任何产品P在这个类型中,他们认为这个类型还是有意义的。

^_^
[该贴被yuxb111于2008-08-30 20:07修改过]