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