oop - 帮助类设计

标签 oop architecture class-design

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

我将第一个系统中的一个产品称为产品 A,另一个系统称为产品 B。产品 B 的数据取决于用户选择的设置。

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

这很好,但是有很多设置和获取描述的方法。这就是问题所在,我有很多方法似乎都属于产品 B。像 Ge​​tDescription、GetName、GetSku 等方法都是根据用户设置设置的,并且都依赖于产品 A。

虽然它们似乎都与产品 B 相关,但类变得非常大,我想将一些方法从类中移到另一个类中。我正在考虑使用工厂模式。像下面这样的东西(代码只是一个快速的想法)

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

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

最佳答案

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

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

关于oop - 帮助类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2258328/

相关文章:

flutter - 在 Google Flutter 应用程序中管理社交用户详细信息

php - 如果业务逻辑要发送电子邮件

php - 什么是模型,什么不是模型 php

Java:难道不能使用迭代器来迭代对象的HashMap并改变对象的属性吗?

c++ - 是否可以在模板类中使用模板化类?

Java栈类

C++,在没有每个成员分配的情况下重置类成员

c++ - 如果构造函数不是继承的,为什么要调用它们?

php - 用于数据库对象交互的其他 PHP 类设计是什么?

c# - 在 C# 或 Java 中对 MruList 进行高效建模