Di solito su Php o in Java e in altre lingue a orientamento intrinseco con singolo elemento ereditario, quando scrivo un software che utilizzo e interfaccia poi e successivamente implemento la classe che implementa la logica di business.
Ad esempio supponiamo di avere un Uploader di file che ci permette di caricare in vari modi nel nostro caso in un FtpServer o in un AmazonS3 Bucket.
Pertanto dichiaro un'interfaccia FileUploaderInterface
interface FileUploaderInterface
{
public function addFile(fromPath,toPath);
public function removeFile(path);
}
E in seguito implemento un fileUploader separato per ogni modo separato in cui vogliamo caricare i dati:
ad es. per Ftp
class FtpFileUploader implements FileUploaderInterface
{
public function addFile(fromPath,toPath)
{
//Implement Method
}
public function removeFile(path)
{
//Implement Method
}
}
ad es. E per Amazon S3
class AmazonS3FileUploader implements FileUploaderInterface
{
public function addFile(fromPath,toPath)
{
//Implement Method
}
public function removeFile(path)
{
//Implement Method
}
}
Con questo ho la flessibilità di avere un Unique Handling per i caricamenti di file indipendentemente da come funzionerà il meccanismo di caricamento stesso, quindi se voglio caricare usando un X api devo solo implementare l'interfaccia FileUploaderInterface
.
Ma su ES6 trovo che sono un vero e proprio pesce fuor d'acqua int di software, quindi è una buona idea / pratica dichiarare una classe che ha tutti i metodi di base che vuole che interpreti il ruolo di un'interfaccia
Es: una classe generica per il caricamento di file in un file denominato "FileUploader.js"
export default class FileManager {
addFile(fromPath,toPath,callback){
}
deleteFile(path, callback){
}
}
E per ogni modalità di caricamento, sviluppo solo una classe specifica:
ad es. Per il caricamento tramite FTP
import FileManager from './FileUploader.js'
export default class FtpUploadManager extends FileManager {
addFile(fromPath,toPath,callback){
// Implement method
}
deleteFile(path, callback){
// Implement method
}
}
ad es. Per il caricamento tramite Amazon S3
import FileManager from './FileUploader.js'
export default class S3UploadManager extends FileManager {
addFile(fromPath,toPath,callback){
// Implement method
}
deleteFile(path, callback){
// Implement method
}
}
Quali sono i lati positivi e negativi dell'utilizzo del seguente metodo?
La principale differenza che sto chiedendo di Ci sono dei principi OO che sono praticamente applicabili per Javascript? è se un modo specifico di usare classi Js è buono o meno e non generico.