Ngọ*_*yễn 1 java architecture uml class-diagram software-design
我现在正在学习软件设计。我是一名前端人员,所以这可能是一个愚蠢的问题,但我真的很想知道答案。希望你能帮助我。
我必须设计一个电子商务系统。更具体地说,我正在设计电子商务中的购买系统。我对如何做到这一点做了一些研究并找到了 EAV。但在知道 EAV 是反模式之后,我不想使用它,而且我必须保持简单,以便像我这样的初学者理解设计。
当然,我认为这个设计是不正确的。我花了大约三天的时间进行研究并思考如何解决这个Product问题ProductType。
我只想有一个像iPhone这样的产品,比如有属于手机的属性,可乐有属于饮料的属性等等。
我怎么能这样做呢?
请告诉我如何以简单的方式解决这个问题,因为我对此很陌生。一些有关软件设计的文章或书籍也值得赞赏。
谢谢<3
基本上您知道所有产品(至少)都有一个产品类型。而且您知道产品类型实例最终将是饮料、电话等。因此,您首先需要
您需要确保它ProductType是 aninterface或 anabstract class或 a base class。Aninterface是已声明的实体类型,其功能已知,但尚未实现。实现它的方法是实现 的类的工作interface。Anabstract class是完全声明但仅部分定义的实体类型。如果您有一个abstract class,那么您就能够实现它的一些方法,但是您将其一些方法的实现委托给它的实现子类。基数class是class完全定义的。
因此,您的第一个决定是做出ProductType以下其中一项:
interfaceabstract classclass您需要考虑产品类型的共同功能是什么。如果它们应该有一些工作原理完全相同的方法,那么您不一定需要接口,但您需要一个abstract class或一个基类class。interface如果您决定此时不定义 an ,也没有问题。如果您意识到无论如何都需要它,那么稍后您可以定义它。因此,假设不同产品类型的方法至少部分通用,您将需要一些类。默认情况下,它应该是一个 base class,即一个法线,其中包含 a应该实现的class所有方法。ProductType不用担心,如果某些特定产品类型在某些方法的情况下与基本方法相比应以不同的方式运行class,您始终可以覆盖子类的基本class方法。
但是,您可能需要一个abstract class. 为了确定 an 是否abstract class是正确的方法,需要查明是否至少存在这样一个方法,class该方法在任何情况下都不应该由基类实现,因为该方法始终仅在子类级别上已知。例如,如果您有一种evaluate方法,那么您可能需要针对您的产品类型单独实现它,因为与汽车相比,手机的评估方式不同。
接下来,需要定义具体的ProductType子类,即extends/的类implement ProductType。我们知道aProductType可能有0个或者多个Products,但是一个product可以有更多的产品类型吗?
如果不可能将ProductType更多产品类型与单个Product. 否则,您将需要按产品收集产品类型。
由于Product它也是更通用的东西,您可能需要调用Product中的方法ProductType。这意味着您需要决定是否Product:
interfaceabstract classclass同样,使用与您在决定应该做什么时使用的类似的思维过程ProductType。
ProductType和是否可以有子类型、子子类型等等,这是一个大问题Product。如果是这种情况,您将需要根据需要为它们实现树,并具有适当的插入/更新/删除/搜索功能
只要有可能,就不要引用特定的产品类型,因为这样您就必须复制粘贴其他产品和产品类型的代码。每当您的所有产品类型或产品都适用相同的模式时,请通过它们的最abstract代表性(分别是它们的interface、abstract class或base class)来引用它们,并且仅在实例化时以及当您被迫时才使用具体类型。
使用工厂方法而不是构造函数进行实例化,因为工厂方法可以返回子类型的实例(如果您需要的话)。