Я разрабатываю приложение для передачи баз данных и каталогов загруженных пользователями изображений / документов с нашего производственного сервера на сервер разработки. Приложение написано на 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.
Если это не подходящая ситуация для наследования, как мне структурировать приложение? Как я сказал ранее, то, как я делаю это прямо сейчас , работает , но я хотел бы воспользоваться этой возможностью, чтобы узнать больше о шаблонах проектирования и написать свой код таким образом, чтобы это имело смысл.