Oop 帮助进行课堂设计

Oop 帮助进行课堂设计,oop,architecture,class-design,Oop,Architecture,Class Design,我有一个类,它必须从一个系统的数据库中获取产品信息,并将其保存到另一个系统的产品数据库中 我将从第一个系统产品a和另一个产品B调用一个产品。产品B的数据取决于从用户选择的设置 因此,产品B可能有一个GetDescriptions方法,用于查看用户设置,该设置表示使用产品a中的Description1变量,或者他们可以选择Description 2,或者他们可以使用产品B中已有的描述 这很好,但是有很多设置和方法可以获取描述。这就是问题所在,我有很多方法似乎都与产品B有关。方法如GetDescri

我有一个类,它必须从一个系统的数据库中获取产品信息,并将其保存到另一个系统的产品数据库中

我将从第一个系统产品a和另一个产品B调用一个产品。产品B的数据取决于从用户选择的设置

因此,产品B可能有一个GetDescriptions方法,用于查看用户设置,该设置表示使用产品a中的Description1变量,或者他们可以选择Description 2,或者他们可以使用产品B中已有的描述

这很好,但是有很多设置和方法可以获取描述。这就是问题所在,我有很多方法似乎都与产品B有关。方法如GetDescription、GetName、GetSku,都是根据用户设置设置的,都依赖于产品a

尽管它们似乎都与产品B有关,但类正在变得非常大,我想将一些方法从类中移到另一个类中。我在考虑使用工厂模式。类似于下面的代码(只是一个简单的想法)


我的问题是:什么是好的设计?我上面提出的方法可以接受吗?您认为这种设计有任何潜在问题吗?

我建议您在ProductBuilder中使用抽象,而不是直接使用ProductA和ProductB。。。这样,您可以在以后轻松地更改实现。使用接口或抽象类


此外,它将更易于测试和模拟。

这是工厂模式的一种变体,是一种非常有用的设计形式。您所写的内容建议了一个简洁的三类设计:
ProductA
只包含与a相关的方法和属性,
ProductB
包含与B相关的方法和属性,以及基于a构建B的
ProductBuilder

唯一的陷阱是一般的OOP设计问题。确保ProductConverter不依赖于A或B的内部知识——换句话说,确保A和B的公共接口足够丰富,ProductConverter可以完成其工作。只有A应该连接到A的产品数据库,只有B应该连接到B的产品数据库。避免单身和全局状态。这些是您在几乎任何应用程序中都会做的事情,但在这种系统中它们将是特殊的陷阱

public class ProductBuilder
{
    public ProductB BuildProduct()
    {
          SkuBuilder.BuildSku(ProductB,ProductA);
          ProductDescriptionBuilder.BuildDescription(ProductB,ProductA);
    }
}