我正在学习软件设计。我是一个前端的家伙,所以这可能是一个愚蠢的问题,但我真的很想知道答案。希望你能帮我。
我得设计一个电子商务系统。更具体地说,我在设计电子商务中的购买系统。我做了一些研究如何做到这一点,并找到了eav。但是在知道eav是反模式之后,我不想使用它,而且我必须保持它的简单性,以便像我这样的初学者理解设计。
这是你的名字 class
我自己设计的图表。
当然,我不认为这个设计是正确的。我花了三天时间做研究,思考如何解决这个问题 Product
以及 ProductType
问题。
我只想有一个像iphone这样的产品,比如说,有属于手机的属性,有属于饮料的属性,等等。
我怎么能这么做?
请告诉我如何用一种简单的方法来解决这个问题,因为我是新手。一些关于软件设计的文章或书籍也可以欣赏。
谢谢<3
1条答案
按热度按时间axr492tv1#
基本上你知道所有的产品都有(至少)一种产品类型。你知道一个产品类型示例最终会变成一个饮料,一个电话,等等
产品类型抽象化
你需要确保
ProductType
是一个interface
或者一个abstract class
或者一个基地class
. 一interface
是声明的实体类型,其功能已知,但尚未实现。它是实现interface
实现其方法。一abstract class
是完全声明但仅部分定义的实体类型。如果你有abstract class
,则可以实现它的一些方法,但是可以将它的一些方法的实现委托给它的实现子类。基地class
是一个class
这是完全定义的。所以你的第一个决定是
ProductType
下列之一:interface
abstract class
底座class
您需要考虑产品类型的通用功能是什么。如果它们应该有一些工作完全相同的方法,那么您不一定需要一个接口,但是您将需要一个abstract class
或者一个基地class
. 如果您决定不定义interface
在这一点上,没关系。稍后,如果你意识到你无论如何都需要它,你可以定义它。因此,假设独立产品类型的方法至少部分通用,您将需要一些类。默认情况下,它应该是一个基class
,即正常class
所有的方法ProductType
应该实施的。儿子不必担心,如果某些特定的产品类型在某些方法的情况下应该以不同的方式与基础进行比较class
,始终可以覆盖基class
子类的方法。但是,您可能需要
abstract class
. 为了决定abstract class
我们要做的是找出是否至少有这样一种方法不应该由基实现class
在任何情况下,因为该方法总是只在子类级别上已知。例如,如果你有evaluate
方法,那么您可能需要为您的产品类型分别实现它,因为手机的评估方式与汽车不同。接下来,您需要定义特定的
ProductType
子类,即extends
/implement
ProductType
. 我们知道ProductType
可能有0个或多个产品,但是一个产品可以有更多的产品类型吗?处理一对多与多对多关系
产品需要有
ProductType
如果无法将更多产品类型关联到单个Product
. 否则,您将需要按产品列出产品类型的集合。产品抽象化
自
Product
也是更一般的,您可能需要调用Product
方法来自ProductType
. 这意味着您需要决定Product
是一个:interface
abstract class
底座class
同样,用一个类似的思维过程,当你决定要做什么的时候ProductType
应该是。产品类型和产品树
一个很大的问题是是否可以有子类型,子类型,等等
ProductType
以及Product
. 如果是这样的话,您需要根据需要为它们实现具有适当插入/更新/删除/搜索功能的树使用你的抽象
只要有可能,不要引用特定的产品类型,因为这样您就必须复制粘贴其他产品和产品类型的代码。当相同的模式适用于您的所有产品类型或产品时,请按它们的最大值来引用它们
abstract
代表(他们的interface
,abstract class
或者base class
,并且仅在示例化和强制执行时使用具体类型。工厂
使用工厂方法来示例化而不是构造函数,因为如果需要的话,工厂方法可以返回子类型的示例。