oop - 我应该如何构建这个类的继承?

标签 oop inheritance coldfusion

我正在开发一个应用程序,用于将用户上传的图像/文档的数据库和目录从我们的生产服务器传输到开发服务器。该应用程序是用 Coldfusion 编写的,但我认为该语言与该问题无关 - 它更多的是结构/体系结构问题,而不是特定于该语言的问题。

我将为我的示例编写伪代码,因此请不要拆开语法。

当我看到类继承的演示时,它通常很简单,例如 class Student extends Person() {}。显然,学生是一个更专业的人,所以这是有道理的。

在我的应用程序中,我有一个类 Site(),其中包含相关信息,例如 DSN、文件上传目录等。我在一个类中执行 SQL 导出,并在一个类中执行文件上传导出另一个类,这两个类都是从站点类中调用的(伪代码):

class Site {
    public function exportSql() {
        sqlExport = new sqlExport(this.dsn);
        sqlExport.createDumpAndZipItAndStuff();
    }
    public function exportUploads() {
        uploadsExport = new uploadsExport(this.uploadDirectory);
        uploadsExport.copyAndZipFilesAndStuff();
    }
}

Site 类除了控制应用程序前端请求的流量之外不执行任何其他操作,其他所有内容都将交给导出类之一。

这对我来说效果很好,但我想正确构建它。现在,我必须将 Site 的属性传递给导出类的构造函数,然后使用这些参数设置导出类的属性。这会导致大量重复。

让我的导出类继承 Site 类以便我可以直接访问属性是否合适?导出类并不是一个更专业的站点,如我之前给出的“人员/学生”示例中所示。相反,它们只是执行 Site 类的繁重工作。

如果这不适合继承,我应该如何构建应用程序?正如我之前所说,我现在的做法有效,但我想借此机会了解有关设计模式的更多信息,并以有意义的方式编写代码。

最佳答案

当某事物另一事物时,应该使用继承。

就像狗是动物一样,因此它应该继承自动物。

Export 不是一种 Site,因此它不应该继承它。

您正在寻找的是 Composition导出应包含对其导出的站点引用。然后你可以在构造时将 Site 对象传递给它,它就可以在你需要时从站点获取数据。

关于oop - 我应该如何构建这个类的继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049921/

相关文章:

java - Eclipse 不断构建工作区

php - echo 语句中的值发生变化

r - 如何查看使用methods/RMethodUtils 包编写的方法的代码?

c++ - 将 ifstream 对象传递给需要 istream 类型的函数

java - 获取类的所有方法的新方法是什么,包括 Java 8 的继承默认方法?

mysql - 类别和子类别的分组和输出

css - 如何防止 CFDocument 中的分页出现在内容中间?

c++ - 如何在C++中继承类?

oop - 里氏替换原理的例子是什么?

javascript - 属性复制到继承类型的目的