我应该如何设计一个电子商务类图?

wf82jlnq  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(462)

我正在学习软件设计。我是一个前端的家伙,所以这可能是一个愚蠢的问题,但我真的很想知道答案。希望你能帮我。
我得设计一个电子商务系统。更具体地说,我在设计电子商务中的购买系统。我做了一些研究如何做到这一点,并找到了eav。但是在知道eav是反模式之后,我不想使用它,而且我必须保持它的简单性,以便像我这样的初学者理解设计。
这是你的名字 class 我自己设计的图表。

当然,我不认为这个设计是正确的。我花了三天时间做研究,思考如何解决这个问题 Product 以及 ProductType 问题。
我只想有一个像iphone这样的产品,比如说,有属于手机的属性,有属于饮料的属性,等等。
我怎么能这么做?
请告诉我如何用一种简单的方法来解决这个问题,因为我是新手。一些关于软件设计的文章或书籍也可以欣赏。
谢谢<3

axr492tv

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 ,并且仅在示例化和强制执行时使用具体类型。

工厂

使用工厂方法来示例化而不是构造函数,因为如果需要的话,工厂方法可以返回子类型的示例。

相关问题